“堆栈”(数据结构)的逻辑背后是什么?

时间:2018-03-19 15:53:46

标签: data-structures stack computer-science

我们都知道“stack”是一个先排后的数据结构。

但堆栈的逻辑背后是什么。

我们可以在“反向波兰表示法”中看到堆栈的应用,程序调用,使递归不是递归的。

人们如何从这种数据结构中思考,这种数据结构背后的直觉是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

开发堆栈的可能原因是函数调用。函数调用产生的嵌套结构使堆栈适合tee。实际上,您甚至需要进程(或线程)堆栈的唯一原因是处理函数调用。

调用函数的正常顺序是:

  1. 调用者在堆栈上推送参数。
  2. 调用函数 (它将程序计数器推到堆栈上)
  3. 功能保存推送将基本寄存器推送到堆栈上。
  4. 函数将堆栈指针移入基址寄存器。 。 。 。 功能可以使呼叫做同样的事情。

  5. 函数将基址寄存器值移动到堆栈指针中。

  6. 函数从堆栈中弹出旧的基址寄存器值。
  7. 函数执行返回函数(从堆栈中弹出程序计数器值并将其加载到寄存器中)。
  8. 这些都是堆栈操作。

答案 1 :(得分:0)

应根据手头问题的需要选择任何数据结构。您已经确定的问题肯定是堆栈数据结构的适当应用程序的常见示例,但是如果您想一想,您可能会想出其他示例,其中堆栈数据结构可能是最合适的数据结构选择。 / p>

考虑产品/包裹分发中心。传送带可能很乐意将包装好的产品沿着装卸码头移动,但正如人们可能想象的那样,当卡车装满或者卡车装载机(一名员工)不堪重负时,输送机需要停下而不是将包裹倾倒在地板上装卸码头。为了防止包装区域在新卡车回到原位或者装载机从不堪重负中恢复时必须闲置,设施可能会有一个溢流输送机,以90°的角度从主输送机上冲出。当装载机没有从输送机的末端拾取最新的包装时,推进器将下一个包装从输送机推到溢流输送机上,溢流输送机随后将反向运行以将这些包装推回到主输送机上。推入溢流输送机的包裹以FILO顺序返回主输送机。跟踪推入溢流输送机的包装可能是堆栈数据结构的适当应用。