栈-->如何实现浏览器的前进、后退功能?
我们使用两个栈,X 和 Y,
我们把首次浏览的页面依次压入栈 X,当点击后退按钮时,
再依次从栈 X 中出栈,并将出栈的数据依次放入栈 Y。
当我们点击前进按钮时,我们依次从栈 Y 中取出数据,放入栈 X 中。
当栈 X 中没有数据时,那就说明没有页面可以继续后退浏览了。
当栈 Y 中没有数据,那就说明没有页面可以点击前进按钮浏览了。
比如你顺序查看了 a,b,c 三个页面,我们就依次把 a,b,c 压入栈,这个时候,两个栈的数据就是这个样子:
当你通过浏览器的后退按钮,从页面 c 后退到页面 a 之后,我们就依次把 c 和 b 从栈 X 中弹出,并且依次放入到栈 Y。这个时候,两个栈的数据就是这个样子:
这个时候你又想看页面 b,于是你又点击前进按钮回到 b 页面,我们就把 b 再从栈 Y 中出栈,放入栈 X 中。此时两个栈的数据是这个样子:
这个时候,你通过页面 b 又跳转到新的页面 d 了,页面 c 就无法再通过前进、后退按钮重复查看了,所以需要清空栈 Y。此时两个栈的数据这个样子:
栈是一种操作受限的数据结构,只支持入栈和出栈操作。
后进先出是它最大的特点。
栈既可以通过数组实现,也可以通过链表来实现。不管基于数组还是链表,入栈、出栈的时间复杂度都为 O(1)。
学习:极客时间《数据结构与算法之美》学习笔记