GESP 六级 · GESP 202503 C++ 六级 第 9 题

选择题 · 答案 A · 考点:数据结构

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

题目

以下代码实现了循环队列的哪种操作?

class CircularQueue {
    int* arr;
    int front, rear, size;
public:
    CircularQueue(int k) {
        size = k;
        arr = new int[k];
        front = rear = -1;
    }

    bool enQueue(int value) {
        if (isFull()) return false;
        if (isEmpty()) front = 0;
        rear = (rear + 1) % size;
        arr[rear] = value;
        return true;
    }
};
答案:A

考点

数据结构

解题思维

C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。

常见错误

构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。

详细解析(节选)

【考点】数据结构|队列操作|取模运算

🎯 考纲定位:GESP 六级 数据结构模块,命题人专盯“能区分入队/出队”的薄弱点,绝大多数考生只背“队列”概念,不会看代码细节。构造函数初始化 front = rear = -1,为后续入队做准备。此题卡住“只看类名不看函数”的思维定式,同时考察取模运算,且常与数组下标越界混淆。

🧠 解题思维:先瞄函数名 enQueue——名字已暴露意图;再看 rear = (rear + 1) % size 和 arr[rear] = value,这是在尾部写数据,典型入队行为。对比 isFull 分支,它只负责容量检查,不参与移动;isEmpty 分支处理空队列初始化。注意 front 初始为 -1,入队后才会转正。

🪤 陷阱拆解:B 项出队应 front 右移并取值;C 项取队首只读 arr[front];D 项判空仅需 front == rear。代码里 isFull 的分支是干扰项,真正关键的是 rear 自增与赋值。若误判为 C 项,会忽略赋值动作。且 size 为 0 时取模会除零。

🔄 反命题思维:若把 rear 改为 front = (front + 1) % size 并删除赋值,就是出队;若去掉 isFull 检查,会溢出。记住:看名字 + 看指针移动方向 + 看是否写数据。换头换尾即变出队。isEmpty 条件判断的是队首指针。

—— by

同考点真题

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