概念
栈是一种线性的数据结构,栈中的元素只能先进后出(first in last out,简称FILO)。
最早进入的元素存放的位置叫作栈底,最后进入的元素存放的位置叫作栈顶。
存储原理
栈既可以用数组来实现,也可以用链表来实现。
数组实现的栈也叫顺序栈或静态栈。
链表实现的栈也叫链式栈或动态栈。
线性结构举例:顺序表、栈、队列
非线性结构距离:树、图
操作
入栈(压栈)
入栈(push)操作就是把新元素放入栈中,只允许从栈顶一侧放入元素,新元素的位置将会成为新的栈顶
出栈(弹栈)
出栈操作(pop)就是把元素从栈中弹出,只有栈顶元素才允许出栈,出栈元素的前一个元素将会成为新的栈顶。
应用场景举例
(1)函数调用
没进入一个函数,就会将临时变量作为一个栈入栈,当被调用函数执行完成,返回之后,将这个函数对应的栈帧出栈。
(2)浏览器的前进\后退功能
我们使用两个栈,X和Y,我们把首次浏览的页面依次压入栈X,当点击后退按钮时,再依次从栈X中出栈,并将出栈的数据依次放入Y栈。当我们点击前进按钮时,我们依次从栈Y中取出数据,放入栈X中。当栈X中没有数据时,说明没有页面可以继续后退浏览了,当栈Y中没有数据时,说明没有页面可以点击前进按钮浏览了。