数据结构与算法演示台SUANFA.NET.CN · STEP BY STEP

栈与队列 · 单步演示

队列(循环队列)

一端进、另一端出的线性表:先放进去的先拿出来。用定长数组实现时,让 front、rear 走到末尾后绕回 0,就能反复利用已经空出来的格子。

数字表示 enqueue,「-」表示 dequeue;队列容量 6,最多 20 个操作。 输入只在你的浏览器里计算,不会上传。

 0front rear
 1 
 2 
 3 
 4 
 5 
出队顺序(空)

步 001 / 017空的循环队列,容量 6。front 指向队头,rear 指向下一个空位;走到末尾就绕回 0。

键盘: 单步,空格 播放/暂停(先点一下演示区)。

伪代码 · 当前行高亮

  1. enqueue(x):
  2. if size = cap:队满,拒绝
  3. q[rear] ← x;rear ← (rear+1) mod cap;size ← size+1
  4. dequeue():
  5. if size = 0:队空,拒绝
  6. x ← q[front];front ← (front+1) mod cap;size ← size−1;return x

变量

front0
rear0
size0
容量 cap6
队列内容(从头到尾)[]

复杂度

最好情况O(1)
平均情况O(1)
最坏情况O(1)
额外空间O(n)

入队出队都只改一个格子和一个下标。取模让下标绕回开头,不需要整体搬移元素。

要点

  • 本演示用 size 计数来区分「空」和「满」;另一种常见做法是故意空出一个格子,用 (rear+1) mod cap = front 判满。
  • 广度优先搜索、层序遍历、任务排队都用队列。

常见错误

不用取模、让 rear 一直往后加,数组前面出队空出来的格子就再也用不上,出现「假溢出」。

同一类的其他演示