前言
栈是一种非常常见的数据结构,并且在程序中的应用非常广泛。
介绍
栈(stack)是一种受限的线性表,后进先出(LIFO)
- 其限制是仅允许在表的一端进行插入和删除运算,这一端称为栈顶,相对的另一端就成为栈底。
- 向一个栈中添加新元素称为进栈、入栈或压栈,添加的新元素会成为栈中的新的栈顶元素。
- 而删除栈中元素称为出栈或退栈,删除掉的元素是栈顶元素,删除后在其下面的元素会随之成为新的栈顶元素。
- LIFO(last in first out)表示就是后进入的元素先弹出栈空间,最先进栈的则最后弹出栈空间。
以下是栈结构的示意图:
javascript中栈的常用方法
程序中使用栈实现的例子(函数调用栈)
我们知道函数之间是可以相互调用的,如:A调用B,B调用C,C再调用D 在执行的过程中会将A压入栈,A没有执行完,所以不会弹出栈 在A执行的过程中调用了B,会将B压入到栈中,这个时候B在栈顶,A在栈底 这个时候如果B执行完了,那么B会弹出栈,但是如果B没有执行完,就会调用C 所以会将C压入栈,同样也是在栈顶 同理若D没执行完则D也压入栈 所以当前的栈顺序为:栈底 | A => B => C => D | 栈顶 当D执行完则弹出栈,C、B、A也会依次弹出栈 这种程序就称为函数调用栈(因为其通过栈实现)
|