数据结构里面怎样通俗易懂地去理解栈
谢 @千万落叶邀。栈本身是一个非常简单的数据结构,所以也谈不上什么通俗易懂的理解。但也许是它太简单了,反而会让初学者觉得这奇怪的玩意儿有啥意义,也让这个问题很难回答。栈有两个特点:基本栈操作非常简单高效,压栈和弹栈都只有O(1)的复杂度压栈和弹栈这一对操作,某种意义上具有“记忆效应”,或者说对称性在应用程序开发中,程序员一般也很少直接使用栈这种数据结构。但另一个角度来说,栈也许是世界上使用最广泛、最高频率的数据结构了,那就是函数栈。一个进程中,每个函数每次被调用的时候,逻辑上都会拥有一块自己的栈内存空间,称为栈帧。基于刚才说的栈的两个特点,函数能够:很容易实现调用完毕后的返回非常轻松、高效地任意互相嵌套调用(如果内存空间足够大)非常简单高效地管理局部内存(相对于动态分配的堆内存)其它大部分情况下,栈数据结构在应用开发中的直接使用,也基本只是用到它能支持递归回溯(也就是嵌套)的特点,比如Java Servlet中的Filter技术。更多详细内容,可以看看一些博客,这方面很多。
■网友
不要去死记那些概念,通过应用场景理解就能开窍。什么时候用到栈呢?满足两个条件:需要保存之前的状态状态涉及先后顺序典型的栈的例子就是计算器的例子,涉及运算先后顺序,涉及到计算状态的保存,两个条件满足就能求出正确的结果。还有个例子也经常提就是网页的Back返回功能,Back需要的第一点是记住前面网页的顺序保证正确的回退;第二点是记住前面的网页正确URL,也就是状态。OK,这些都是很好的栈的例子。自己尝试总结学习吧~
■网友
既然你不理解栈的意义那我就在这说下吧。可能对于刚学习的人来说,知道栈是一种FILO先进后出的结构,可能书上说可以用栈来写一个计算器,但是你可能没试过,讲起来也不方便,那我就说一个更好理解的。你的手机app:首先你打开app,是一个问题列表,之后你点击一个问题,进入了相应的界面,之后你点击评论,进入了评论页面。
好了,现在你想返回主界面怎么办呢?按两下返回键吧,第一次回到问题详情,第二次回到主界面。这时候你就发现了,这些界面的储存结构可以说是一个栈结构,你想回到主界面(位于栈底),必须经历两次弹栈把前面两个界面移除。这个结构在Android开发中成为返回栈或者任务栈,是开发者初学Android的第一课。这就是栈存在的意义吧,这个数据结构其中的一个应用。
■网友
写个计算器就懂了
■网友
我们知道栈就是一个先入后出的数据结构。
【数据结构里面怎样通俗易懂地去理解栈】 你要使用这个数据结构需要满足两个条件,一个是需要记住前面的状态,还有就是前面的多个状态有先后顺序。
比如叠盘子,上面的盘子是我们最后放上去的,而我们要取盘子的时候,也是从最上面的盘子开始拿。这里的每个盘子就可以看做一个状态。
写过文档吧,用过其中的撤销功能(Ctrl+Z)吧,每步操作都可以看作一个状态,将这些操作按照时间先后顺序从下往上排列,撤销的时候则从上往下取消这些操作,这个可以算是栈的一个典型应用。
■网友
你丢了钱包,按照原路返回去找一遍。
■网友
经常用栈写非递归的dfs
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 怎样评价类似前橙会、百老汇、南极圈这样类型的离职帮抱团,对企业的积极意义和消极意义
