- 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。
- 其插入和删除操作都限制在表的一端进行,这一端被称为“「栈顶(top)」”,相对的另一端称为“「栈底(bottom)」”。
- 插入操作称为“「进栈(PUSH)」”或者“压栈”,删除操作称为“「出栈(POP)」”。
- 栈的特点是“先进后出(「FILO,First In Last Out」)”。
- 存储方式
- 顺序栈(手写栈)
- 链式栈(STL stack)


栈的特点是“先进后出”。例如坐电梯,先进电梯的被挤在最里面,只能最后出来;一管泡腾片,最先放进管子的药片位于最底层,最后被拿出来。
编程中常用的递归,就是用栈来实现的。栈需要用空间存储,如果栈的深度太大,或者存进栈的数组太大,那么总数会超过系统为栈分配的空间,就会爆栈,即栈溢出。这是递归的主要问题。
栈用到STL stack,或者自己写栈(手写栈)。为避免爆栈,需要控制栈的大小。stack常用函数:
#include <stack>
using namespace std;
stack<int> s; //声明栈s
s.empty() //堆栈为空,则返回真
s.pop() //移除栈顶元素,出栈
s.push() //在栈顶增加元素,入栈
s.size() //返回栈中元素数目,栈的大小
s.top() //返回栈顶元素的值
该章节的相关重要知识点:前缀、中缀、后缀表达式计算、单调栈