假设循环队列数组长度为 $N=7$,队空判断条件为 front == rear。入队和出队操作如下:
const int N = 7;
int q[N];
int front = 3, rear = 3;
void enqueue(int x) {
q[rear] = x;
rear = (rear + 1) % N;
}
void dequeue() {
front = (front + 1) % N;
}依次执行:
enqueue(10);
enqueue(20);
enqueue(30);
dequeue();
enqueue(40);
dequeue();
enqueue(50);最终 $(front,rear)$ 的值是( )。
仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。
审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。
【考点】循环队列|取模运算|指针维护
1. 🎯 考纲定位 GESP 六级《数据结构》模块。命题人把这道题放在这里,就是要卡住那些"把循环队列当普通队列背"的考生——他们只记得"队空时 front==rear",却不懂循环队列里 front、rear 是独立指针,每次操作都要取模,不取模就溢出。
2. 🧠 解题思维 从头模拟,边执行边更新。初始 front=3, rear=3。
最终 front=5, rear=1。
3. 🪤 陷阱拆解
最阴险的是那个"绕回":rear 从 6 到 0,这是循环队列的核心特征,不理解就会直接错。
4. 🔄 反命题思维 如果改成 N=8,或者把 front、rear 初始值互换,答案会变吗?会。front 初始为 5、rear 为 3 时,最终 front 会变成 6、rear 变成 0。刷到这类题先问自己"如果 N 变了会怎样",就能反向验证逻辑。