分类
Level5

  • 栈(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()  //返回栈顶元素的值

该章节的相关重要知识点:前缀、中缀、后缀表达式计算单调栈