03 栈与队列 — 先来后到的两种规则
李永乐式比喻:
- 栈 = 一摞盘子。你洗完一个就放最上面,要用的时候也从最上面拿。后洗的先拿走(后进先出)。
- 队列 = 食堂排队打饭。先到的人先打到饭,后来的人排后面。先来的先吃(先进先出)。
名词映射
| 英文 | 中文 | 本质 | 比喻 |
|---|---|---|---|
| Stack | 栈 | 后进先出(LIFO) | 一摞盘子 |
| Queue | 队列 | 先进先出(FIFO) | 食堂排队 |
| Push/Pop | 入栈/出栈 | 栈顶操作 | 放盘子/拿盘子 |
| Enqueue/Dequeue | 入队/出队 | 队尾加/队首取 | 排队/打饭 |
栈的结构
队列的结构
企业场景
栈的应用:
- 函数调用栈(递归深度太大导致栈溢出)
- 浏览器的前进/后退(历史记录就是栈)
- 代码括号匹配(左括号入栈,右括号出栈匹配)
- 操作系统中断处理
队列的应用:
- 消息队列(RabbitMQ / Kafka)-- 解耦 + 削峰
- 线程池的任务等待队列
- 打印机的任务排队
- 秒杀系统的请求排队
AI 协作
AI 生成:
- 用 Python 列表实现栈 -- 5 行代码
- LeetCode 20 有效括号 -- 用栈匹配
- 用 collections.deque 实现队列 -- 3 行代码
人类决策:
- 业务强调"后进先处理"(如撤销操作)-> 用栈
- 业务强调"公平排队"(如订单处理)-> 用队列
- 需要优先级 -> 用优先队列(堆)