
【计】 double-end queue
both; double; even; twin; two; twofold
【化】 dyad
【医】 amb-; ambi-; ambo-; bi-; bis-; di-; diplo-; par
carry; end; fringe; point; proper; upright
【计】 end
【医】 extremitas; extremity; telo-; terminal; terminatio; termination; tip
alignment
【计】 Q; queue; queueing
双端队列(双端队列,英文:double-ended queue,缩写为deque)是一种线性数据结构,允许在队列的头部(front)和尾部(rear)进行元素的插入与删除操作。它结合了栈(stack)和队列(queue)的特性,支持先进先出(FIFO)和先进后出(LIFO)两种模式。
ArrayDeque
和Python的collections.deque
。不同编程语言对双端队列的实现存在差异。例如,C++ STL的std::deque
基于分块数组,而Python的deque
采用双向链表结构,这导致两者在中间元素访问性能上存在区别(前者O(1),后者O(n))。
双端队列(Deque) 是一种允许在两端进行插入和删除操作的线性数据结构,全称为Double-Ended Queue。它结合了队列(先进先出)和栈(后进先出)的特性,具有高度的灵活性。
操作自由性
addFirst
)、删除(removeFirst
)或查看元素。addLast
)、删除(removeLast
)或查看元素。实现方式
数据结构 | 插入位置 | 删除位置 | 典型应用 |
---|---|---|---|
队列 | 后端 | 前端 | 任务调度、BFS |
栈 | 栈顶(后端) | 栈顶(后端) | 函数调用、表达式求值 |
双端队列 | 前端或后端均可 | 前端或后端均可 | 滑动窗口、撤销操作 |
滑动窗口算法
在滑动窗口最大值问题中,双端队列可高效维护当前窗口内的极值。
撤销与重做功能
如文本编辑器中,用双端队列存储操作记录,支持两端操作以实现撤销(Undo)和重做(Redo)。
多级调度算法
某些操作系统中,双端队列用于管理不同优先级的任务,允许从两端调整任务顺序。
0-1 BFS优化
在图遍历中,若边权仅为0或1,双端队列可将时间复杂度优化至 $O(V+E)$(普通队列为 $O(E log V)$)。
collections.deque
,支持线程安全操作。Deque
接口(实现类如 ArrayDeque
、LinkedList
)。std::deque
,基于分块数组实现,支持随机访问。双端队列通过两端的自由操作,平衡了功能与效率,是算法设计和工程实践中常用的基础数据结构。
【别人正在浏览】