先进后出-栈
栈和队列是一对逻辑上类似,但取出顺序相反的一组数据结构。今天先来介绍 栈。
什么叫栈呢?其实就是根据存储顺序,先存进去的,只能最后取出;后存进去的,才能先取出。这样说可能有点抽象。举个例子:
- 烙饼:第一个是牛肉馅饼,放在第一层;第二个是鸡肉馅饼,放在第二层;第三个馒头馅饼,放在第三层;第四个豆沙馅饼,放在第四层。
- 然后老板一想,不对啊,第三个饼忘记放馅了,这卖出去岂不是砸自家馅饼店的招牌嘛?于是乎想回去把那个馒头馅饼拿出来。
- 但是那一摞馅饼,下面一层才是馒头馅饼,直接取不出来啊。怎么办?只好把第一个馅饼先取下来,然后把馒头馅饼拿出来,然后再把豆沙馅饼再放回去就是了。
- 你刚刚放回去,这时候又来了一个客人,想吃牛肉馅饼,你一看,麻烦了,牛肉馅饼在最下面。怎么办?又只能一个一个拿出来,然后把牛肉馅饼给客人,再把剩下的馅饼挨个摞回去。
以上场景,把馅饼比作数据,取出和插入数据的逻辑大概就是这么个情况。可以看出,这种数据结构有比较明显的限制,不太方便。但是,也正是因为这种不方便再实现部分需要考虑这种限制的数据结构的时候更加容易。举例来说:浏览器的前进后退,
- 假设:a,b,c,d四个页面。
- 你浏览了a页面
- 接着浏览了b页面
- 再接着你浏览了c页面
- 这时候你点后退,将会把c页面存到另一个栈里,然后你到了b页面
- 再后退,你到了c页面,b页面也到了另一个栈里。
- 这时候你点前进,则会从前进的栈里取出最后一个加入的b页面加载出来。
这就是一个简单的栈数据结构的应用。