程序员 · 高频练习

长度为8的循环队列为什么最多只存7个元素?

初级 单选题 第 1124 题 较难 程序员循环队列队满条件frontrear
题目

循环队列使用长度为8的数组,约定front==rear表示队空,(rear+1)%8==front表示队满。该队列最多能保存多少个元素?

A 6个
B 7个
C 8个
D 9个
题目类型:原创高频练习题 用途:用于帮助理解程序员相关考点和答案解析,不等同于官方真题。
正确答案
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个元素。