核心认知
栈和队列都属于线性结构,但它们的重点不是“怎么存”,而是“怎么取”。 它们最重要的区别只有一条:- 栈是后进先出
- 队列是先进先出
栈是什么
栈可以理解成一摞盘子。- 新元素只能放到顶部
- 取元素也只能从顶部取
- 入栈
- 出栈
- 查看栈顶
list 就可以直接当栈用。
队列是什么
队列可以理解成排队。- 后来的人排到后面
- 先来的人先处理
- 入队
- 出队
- 查看队头
collections.deque,而不是直接用 list。
为什么栈和队列题这么常见
因为很多题目本质上都在维护“访问顺序”。 例如:- 最近的状态先处理,常常想到栈
- 一层一层扩散处理,常常想到队列
- 单调栈
- 单调队列
- BFS
常见题型
栈与队列题通常集中在这些方向:- 括号匹配
- 单调栈
- 单调队列
- BFS
- 用栈实现队列
- 用队列实现栈
一个经典的 Python 例子
有效括号是栈题里最基础的模型。学习建议
建议按这个顺序练:- 有效括号
- 用栈实现队列
- 用队列实现栈
- 删除字符串中的相邻重复项
- 单调栈基础题
- 滑动窗口最大值

