题目
循环队列使用长度为8的数组,约定front==rear表示队空,(rear+1)%8==front表示队满。该队列最多能保存多少个元素?
题目类型:原创高频练习题
用途:用于帮助理解程序员相关考点和答案解析,不等同于官方真题。
正确答案
B
若8个位置全部使用,rear绕回后可能再次等于front,与队空状态无法区分。该实现预留一个空位作为判满标志,因此有效容量是8-1=7。
选项分析
A
错误。没有理由额外再少一个位置。
B
正确。预留一格时容量为N-1。
C
错误。放满8格后front与rear关系会和空队列混淆。
D
错误。循环利用空间不代表容量超过物理数组长度。
本题为什么容易错
‘循环’容易让人产生空间无限的错觉。它只是把数组末尾接回开头重复利用,并不会创造第9个存储单元。
先看结论
简短答案
长度为8的循环队列为什么最多只存7个元素,正确答案是 B(7个)。若8个位置全部使用,rear绕回后可能再次等于front,与队空状态无法区分。该实现预留一个空位作为判满标志,因此有效容量是8-1=7。
解析
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 6个 | 本题干扰项 | 错误。没有理由额外再少一个位置。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 7个 | 本题正确答案 | 正确。预留一格时容量为N-1。 | 看到题干核心场景时优先联想到它 |
| 8个 | 本题干扰项 | 错误。放满8格后front与rear关系会和空队列混淆。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 9个 | 本题干扰项 | 错误。循环利用空间不代表容量超过物理数组长度。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 6个:错误。没有理由额外再少一个位置。
- 8个:错误。放满8格后front与rear关系会和空队列混淆。
- 9个:错误。循环利用空间不代表容量超过物理数组长度。
复习
知识点详解
循环队列通过取模让指针回到数组起点。采用预留一格时,队列长度可写为(rear-front+N)%N,取值范围是0到N-1。
备考速记
循环队列留一座空椅子,用它区分‘没人坐’和‘已经坐满’。
front 在rear场景中的作用
若需要使用全部8格,可增加count记录元素数:count为0表示空,count为8表示满,但每次入队出队都要正确维护count。
拓展
同类题怎么考
- 根据front和rear关系判断循环队列空满。
- 计算预留一个位置方案的有效容量。
front 在程序员软考中的考法
看到front==rear为空且下一rear等于front为满,就直接判断使用N-1容量方案。
解题思路
题干已经给出判满条件,说明采用‘牺牲一格’方案。数组有8格,留1格作状态区分,实际能放7个,选B。
考点定位
预留位置只是区分空满的一种实现;若额外维护元素计数或布尔标志,也可使用全部数组位置。
易错提醒
- rear加1后忘记对数组长度取模。
- 出队时移动错指针,导致元素被跳过。
- 混用rear指向队尾元素与rear指向下一空位两套约定。
备考提示
- 先写清front、rear各指向哪里,再背公式。
- 用长度4的小数组手动画入队、绕回、判满全过程。
你可能还想了解
- 循环队列为什么要空一个位置?
- 队满条件怎么写?
- 循环队列长度如何计算?
本文小结
用front等于rear表示空、下一rear等于front表示满时,需要预留一个位置,长度8的循环队列最多存7个元素。