循环队列用取模实现首尾相连,front指队首、rear指队尾后一位,容量n的数组存n-1个元素;空时front==rear,满时(rear+1)%capacity==front,长度为(rear−front+capacity)%capacity。

循环队列通过“首尾相连”的逻辑复用数组空间,避免普通队列在出队后前端空间无法再利用的问题。核心在于用取模运算(%)让下标在数组边界自动折返,而不是移动元素或扩容。
关键设计:两个指针 + 一个判空判满技巧
使用 front 指向队首元素,rear 指向下一个入队位置(即队尾后一位)。容量为 n 的数组,实际只存 n-1 个元素——这是区分空与满的最简方案:
- 空队列:
front == rear - 满队列:
(rear + 1) % capacity == front - 队列长度:
(rear - front + capacity) % capacity
入队(enqueue)操作:先判满,再赋值,最后移动 rear
避免覆盖有效数据是前提:
- 若已满,直接返回失败或抛异常
- 否则将新元素放入
arr[rear] - 更新
rear = (rear + 1) % capacity
出队(dequeue)操作:先判空,再读值,最后移动 front
不删除数据,只改变逻辑起点:
- 若为空,返回错误或 null
- 暂存
arr[front]作为返回值 - 更新
front = (front + 1) % capacity
注意边界与类型安全
用整型下标即可,无需额外存储 size;所有下标运算必须带 % capacity 防越界;Java/C++ 中建议封装为泛型类,Python 可用 list + int 成员模拟。不复杂但容易忽略取模时机和满判定条件。

















