Data structures 堆栈数据结构的用途是什么?

Data structures 堆栈数据结构的用途是什么?,data-structures,stack,Data Structures,Stack,我一直在读关于堆栈的书,但我仍然不知道如何在现实编程中使用它!我知道这是一种后进先出的数据结构,但我如何从中受益?我知道POP和PUSH函数,但那又怎样?每次调用函数时,您都在使用堆栈!当你在做一件事而需要做其他事情时,你必须“放下”你正在做的事情,然后开始做其他事情。每次你完成一件事,你都需要继续你最后“放下”的事情。所有你“放下”的东西都成了一堆 调用函数需要将您正在做的事情“推”到堆栈上。从函数返回时,需要“弹出”上一次按下的按钮以返回到该操作。它在调用子例程的程序内部使用;在调用子例程之

我一直在读关于堆栈的书,但我仍然不知道如何在现实编程中使用它!我知道这是一种后进先出的数据结构,但我如何从中受益?我知道POP和PUSH函数,但那又怎样?

每次调用函数时,您都在使用堆栈!当你在做一件事而需要做其他事情时,你必须“放下”你正在做的事情,然后开始做其他事情。每次你完成一件事,你都需要继续你最后“放下”的事情。所有你“放下”的东西都成了一堆


调用函数需要将您正在做的事情“推”到堆栈上。从函数返回时,需要“弹出”上一次按下的按钮以返回到该操作。

它在调用子例程的程序内部使用;在调用子例程之前,应将所有参数推入堆栈


此外,在合适的情况下,您可以以高级(high-level lang)的方式使用堆栈概念

堆栈在某些地方很有用:任何时候需要解析使用括号进行分组的字符串时,都需要堆栈。如果需要先遍历树的深度-例如,将XML文件的内部表示转换为XML文件,或计算用户给定的表达式的值-则需要堆栈。当然,在大多数这样的情况下,可以通过使用递归避免显式使用它(在幕后,编译器使用堆栈来实现它),但这样做会带来无法防范的隐式堆栈溢出风险。

堆栈的一个常见用法是用于转换中缀表达式的分流码算法,如,将2+3转换为前缀表达式,例如(+2 3),计算机计算前缀表示法表达式要容易得多

因此,我们可以为Q&A网站的编程想出一些别出心裁的名字,比如Stack Overflow。我的意思是:在现实世界的程序中,我什么时候需要它们?@BoltClock这是一个可怕的原因。:-)我们完全可以把这个网站命名为
fellowhackers.com
。(哦,我添加了额外的W吗?@MIH1406,你的书没有给出任何用例吗?实际上,只要不涉及任何递归,就不需要堆栈来实现函数调用。当然,在大多数语言环境中,编译器不知道是否存在任何递归,因此无论如何都会使用堆栈:-)这个答案的第一句话是问这个问题。他提到他已经知道堆栈是后进先出的数据结构。这并不能说明后进先出数据结构为什么重要或有用。它不会告诉你为什么不能使用其他类型的结构,这就是所谓的修辞手段。你对这个答案的其余部分有什么评论吗?@CodyGray,谢谢你正确地使用了“乞求问题”,顺便说一下:-),你肯定有足够的理由让我删除第一句话。在树遍历中添加了“深度优先”,因为那是你需要堆栈的时候。如果执行第二次第一次遍历,则使用队列。因此编译器通常使用此算法计算表达式。