栈与队列
栈与队列是最常见的抽象数据结构之一。它们看起来简单,但会进一步引出单调栈、单调队列、BFS 等更重要的算法套路。
识别信号
- 出现”括号匹配、嵌套结构、表达式求值”→ 栈
- 出现”下一个更大/更小元素、柱状图面积”→ 单调栈
- 出现”层序遍历、按层扩展、最短步数”→ 队列/BFS
- 出现”滑动窗口最大值/最小值”→ 单调队列
反例:如果问题核心是排序或查找而非顺序关系,栈和队列通常不是首选。
怎么处理
- 先判断题目需要的是”最近未处理元素”还是”按进入顺序推进”。
- 需要回退、匹配、找最近关系时优先用栈。
- 需要按层扩展、按时间顺序推进时优先用队列。
- 如果题目要求窗口内最大值、最近更大元素,再进一步判断是否要用单调结构。
典型实例
| 专题 | 关键差异 | 先看什么 |
|---|---|---|
| 顺序结构处理框架 | 覆盖普通栈、单调栈、单调队列三种模式 | 栈/队列选择 + 单调结构的维护逻辑 |
看到什么就先想到这类
- 出现“括号匹配、表达式、最近更大 / 更小元素”。
- 出现“层序遍历、最短步数、按层扩展”。
- 出现“窗口最大值 / 最小值”。