双端队列(Deque)可用同一结构高效实现栈(LIFO)和队列(FIFO):栈操作限于右端(append/pop),队列操作分置两端(append/popleft);支持混合模式与O(1)核心操作,但随机索引为O(n)。

双端队列(Deque)既能高效支持栈(LIFO)操作,也能支撑队列(FIFO)行为,关键在于统一的数据结构接口下,灵活选择从哪一端进行插入和删除。
用同一结构实现栈(LIFO)
只需限制所有操作集中在同一端(如右端),就能完全模拟栈:push 和 pop 都调用 append() 与 pop()(Python 的 deque 默认在右端操作)。
- 入栈:deque.append(x)
- 出栈:deque.pop() —— 移除并返回最右侧元素
- 查看栈顶:deque[-1](不修改结构)
用同一结构实现队列(FIFO)
只需将“入口”和“出口”分置两端:新元素从右端加入,旧元素从左端移出。
- 入队:deque.append(x)
- 出队:deque.popleft() —— 移除并返回最左侧元素,时间复杂度 O(1)
- 查看队首:deque[0]
混合模式:按需切换逻辑
Deque 的真正优势在于运行时动态组合操作。例如实现“带撤销的队列”或“滑动窗口最大值”:
- 前端插入 + 后端弹出 → 类似栈的逆序加载
- 前后都可 popleft()/pop() → 实现优先级调整(如把某元素移到队首)
- 结合 maxlen 参数可自动丢弃旧项,天然适配固定长度缓冲区
注意边界与性能一致性
所有核心操作(append、pop、appendleft、popleft)均为 O(1);但随机索引访问(如 deque[i])是 O(n),应避免频繁使用。若需频繁索引,考虑是否真需要 deque,还是改用 list 或专门结构。

















