GESP 六级 · GESP 202606 C++ 六级 第 5 题

选择题 · 答案 A

← 整套速查表 GESP 六级 全部真题

题目

假设循环队列数组长度为 $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)$ 的值是( )。

答案:A

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】循环队列|取模运算|指针维护

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 变了会怎样",就能反向验证逻辑。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断