Skip to content

队列

Queue · FIFO queue

在尾部插入、头部删除、遵循先进先出的结构。

条目类型
模型

形式陈述

队列是抽象数据类型的一个具体接口:它只规定先进先出的可观察行为,不规定底层必须使用循环数组、链表还是持久化序列。

队列支持在尾部 enqueue(x)、在头部 dequeue(),满足先进先出:若依次入队 x1,,xk 且无其他元素,则出队顺序为 x1,,xk。空队列操作的结果由接口约定。

直觉

队列保留到达顺序,保持先进先出:最早进入且尚未删除、等待最久的对象最先被服务。这个顺序使它天然表示按发现时间扩张的前沿,而不是任意集合;队头与队尾职责分离,是它与栈的根本区别,也足以支持常数时间入队、出队。数组环形缓冲区通过模容量索引复用已释放位置,避免每次出队搬动剩余元素。

队列尾入头出示意图
例子与边界

广度优先搜索用队列按距离层次展开顶点。环形缓冲区可在固定数组中复用头部空间,避免每次出队整体移动。优先队列按键而非到达时间删除,因此不是 FIFO 队列。

依次 enqueue a,b,c 后,三次 dequeue 返回 a,b,c。长度为 m 的环形数组中,尾指针到末端后回到 0;需用元素计数、空一格或额外标志区分“头尾相等表示空”与“表示满”。

队列不支持直接删除中间元素而仍保持同一接口成本。并发队列还需定义原子性和内存回收,单线程指针操作不能直接推广为无锁正确性。

推论与应用

广度优先搜索、任务调度和消息缓冲依赖 FIFO 次序;双端队列把合法插入与删除扩展到两端,并可退化为队列或栈。顺序 RAM 中的环形数组可给最坏 O(1) 入队、出队与 O(n) 空间,但这张成本表不属于 FIFO 语义本身。

外存优先队列按键选择元素并以块传输计费,既不保持到达顺序,也不能用内存队列的常数操作描述。蓄水池抽样只需顺序读一次未知长度数据流,却维护的是固定大小均匀样本,不是等待出队的全部元素。并发队列则还需规定线性化点、进展条件与内存可见性;这些结构共享“逐项到达”场景,但接口与保证各不相同。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022, §10.1。
  • Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed., Addison-Wesley, 2011, §1.3。
关系图谱5 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系