关于栈的生活实例

1: url的前进和后退

2:app应用的前进和后退

3:弹夹

4:递归函数

5: 计算器

栈有两个特点:
  1. 基本栈操作非常简单高效,压栈和弹栈都只有O(1)的复杂度
  2. 压栈和弹栈这一对操作,某种意义上具有“记忆效应”,或者说对称性

在应用程序开发中,程序员一般也很少直接使用栈这种数据结构。但另一个角度来说,栈也许是世界上使用最广泛、最高频率的数据结构了,那就是函数栈。

一个进程中,每个函数每次被调用的时候,逻辑上都会拥有一块自己的栈内存空间,称为栈帧。基于刚才说的栈的两个特点,函数能够:

  1. 很容易实现调用完毕后的返回
  2. 非常轻松、高效地任意互相嵌套调用(如果内存空间足够大)
  3. 非常简单高效地管理局部内存(相对于动态分配的堆内存)


作者:周毅刚
链接:https://www.zhihu.com/question/51390236/answer/134529714
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可能对于刚学习的人来说,知道栈是一种FILO先进后出的结构,可能书上说可以用栈来写一个计算器,但是你可能没试过,讲起来也不方便,那我就说一个更好理解的。
你的手机知乎app:
首先你打开app,是一个问题列表,之后你点击一个问题,进入了相应的界面,之后你点击评论,进入了评论页面。

好了,现在你想返回主界面怎么办呢?按两下返回键吧,第一次回到问题详情,第二次回到主界面。
这时候你就发现了,这些界面的储存结构可以说是一个栈结构,你想回到主界面(位于栈底),必须经历两次弹栈把前面两个界面移除。
这个结构在Android开发中成为返回栈或者任务栈,是开发者初学Android的第一课。
这就是栈存在的意义吧,这个数据结构其中的一个应用。


tags: Python