环形队列用取模实现索引回环,front指向队头元素、rear指向队尾后一位置;空判rear==front,满判(rear+1)%maxSize==front,元素数为(rear−front+maxSize)%maxSize。

用数组模拟固定容量的环形队列,核心是用取模运算让索引“绕回来”,同时用一个空位约定区分满与空——这是最常用、最稳妥的实战方案。
关键设计原则:front 与 rear 的含义必须明确
front 始终指向队头元素(即第一个待出队的数据),初始值为 0;
rear 始终指向队尾元素的下一个位置(不是最后一个元素本身),初始值也为 0。
这样设计后:
- 队列为空 ⇨ rear == front
- 队列为满 ⇨ (rear + 1) % maxSize == front(预留一位作判断依据)
- 当前有效元素个数 ⇨ (rear - front + maxSize) % maxSize
入队(add/enqueue)操作要点
每次添加前先判满;成功后 rear 向后移动,并自动回环到开头:
- 若
isFull()返回 true,直接拒绝插入,避免覆盖 - 否则执行:
arr[rear] = value; rear = (rear + 1) % maxSize; - 注意:rear 更新必须在赋值之后,且必须取模,否则越界
出队(get/dequeue)操作要点
每次取出前先判空;成功后 front 向后移动,同样需取模回环:
- 若
isEmpty()返回 true,抛异常或返回错误提示 - 否则执行:
value = arr[front]; front = (front + 1) % maxSize; - 取出的是
arr[front],不是arr[front-1]或其他偏移
遍历与调试时的常见陷阱
不能直接 for(i=0; i<maxSize; i++) 打印整个数组——里面混着无效数据。正确做法是按逻辑长度遍历:
- 从
front开始,循环size()次 - 每次下标用
(front + i) % maxSize计算 - 例如 maxSize=4,front=2,rear=1 ⇒ size = (1−2+4)%4 = 3,打印索引 2→3→0
不复杂但容易忽略

















