Skip to content

2011年 408 数据结构 第 3 题

数据结构2011年选择题2分

题目

已知循环队列存储在一维数组 A[ 0..n-1]中,且队列非空时 front 和 rear 分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在 A[0]处,则初始时 front 和 rear 的值分别是( )。

错因

A

套用了"空队列时 front == rear == 0"的常见约定。这个约定本身没错,但配套的入队操作会让第一个元素落到 A[1] 而非 A[0]——因为 rear = (rear+1) % n; A[rear] = x 走完一遍后 rear 变成 1。题目要求"第一个进 A[0]"和这种约定不兼容。

C

front 和 rear 弄反了。题目要求 front 指向队头元素,第一个元素入队后队头是 A[0],所以入队后 front 必须 = 0。又因为入队不会改 front(只改 rear),所以 front 初始就该是 0。C 的 front=n-1 错。

D

rear 初始 n-1 是对的(让 (n-1+1) % n = 0 落到 A[0]),但 front=n-1 错——队头是 A[0],front 应指 0。可能误把"front 和 rear 在空队时取相同值"绑定到任意取值(取 0 或 n-1 都行)。但本题要求第一个元素必须在 A[0],已经把 rear 绑死成 n-1 了,front 不能再跟着取 n-1。

总解析

循环队列的标准入队操作:

c
rear = (rear + 1) % n;
A[rear] = x;

反推 rear 初值:题目要求第一个入队元素落到 A[0],即入队后 rear = 0。

反推 front 初值:入队操作不改 front。入队后队头是 A[0],根据题面"front 指向队头元素",入队后 front = 0,所以初始 front 也是 0。

故初始:front = 0, rear = n-1

「空队判断」:在这种约定下,(rear + 1) % n == front 表示队列空,正好初始时 (n-1+1) % n = 0 = front 成立。

最终答案是 B

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数