08-栈:如何实现浏览器的前进和后退功能?

栈操作相关代码请移步 Leooel 的博客

如何理解栈?

后进者先出,先进者后出,这就是典型的“栈”结构。栈是一种操作受限的线性表。

当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性时,我们就应该首选“栈”这种数据结构。

栈可以用数组或链表来实现,分别叫作顺序栈链式栈。入栈出栈时间复杂度都是 O(1)。

栈在函数调用中的应用

  • 函数调用栈

  • 表达式求值(通过两个栈来实现)

  • 括号匹配

  • 浏览器的前进和后退功能(通过两个栈来实现)

......

课后思考

  • 为什么函数调用要用“栈”来保存临时变量?用其他数据结构不好吗?

因为函数调用符合后进先出的特性,用栈比较方便。

  • JVM 内存管理中有“堆栈”的概念。栈内存用来存储局部变量和方法调用,堆内存用来存储 Java 中的对象。JVM 里面的“栈”和我们这里说的“栈”是不是一回事呢?如果不是为什么又叫作“栈”呢?

不是一回事。数据结构里的堆和栈是数据存储方式的两种数据结构;内存中的堆栈,一般指的是数据操作的存储位置。内存空间在逻辑上分为三部分:代码区、静态数据区和动态数据区,动态数据区又分为栈区和堆区。

你可能感兴趣的:(08-栈:如何实现浏览器的前进和后退功能?)