Skip to content

栈与队列

栈与队列是最常见的抽象数据结构之一。它们看起来简单,但会进一步引出单调栈、单调队列、BFS 等更重要的算法套路。

识别信号

  • 出现”括号匹配、嵌套结构、表达式求值”→ 栈
  • 出现”下一个更大/更小元素、柱状图面积”→ 单调栈
  • 出现”层序遍历、按层扩展、最短步数”→ 队列/BFS
  • 出现”滑动窗口最大值/最小值”→ 单调队列

反例:如果问题核心是排序或查找而非顺序关系,栈和队列通常不是首选。

怎么处理

  1. 先判断题目需要的是”最近未处理元素”还是”按进入顺序推进”。
  2. 需要回退、匹配、找最近关系时优先用栈。
  3. 需要按层扩展、按时间顺序推进时优先用队列。
  4. 如果题目要求窗口内最大值、最近更大元素,再进一步判断是否要用单调结构。

典型实例

专题关键差异先看什么
顺序结构处理框架覆盖普通栈、单调栈、单调队列三种模式栈/队列选择 + 单调结构的维护逻辑

看到什么就先想到这类

  • 出现“括号匹配、表达式、最近更大 / 更小元素”。
  • 出现“层序遍历、最短步数、按层扩展”。
  • 出现“窗口最大值 / 最小值”。