循环队列操作
题目要求
假设使用长度为11的数组作为顺序队列,初始为空。请绘制完成以下操作后的队列示意图,并说明元素无法入队的原因。
操作序列:
- A, B, C, D, E 依次入队
- A, B 依次出队
- F, G, H, I, J 依次入队
- O, P, Q, R 依次入队
参考答案与解析
一、循环队列操作示意图
步骤 | 操作类型 | 队列状态(索引0-10) | 关键参数 |
---|---|---|---|
1 | A-E入队 | [A, B, C, D, E, -, -, -, -, -, -] | front=0, rear=5 |
2 | A-B出队 | [-, -, C, D, E, -, -, -, -, -, -] | front=2, rear=5 |
3 | F-J入队 | [-, -, C, D, E, F, G, H, I, J, -] | front=2, rear=10 |
4 | O-P入队 | [P, -, C, D, E, F, G, H, I, J, O] | front=2, rear=1 |
注:
-
表示空位,字母表示已存储元素
二、关键操作解析
1. 初始状态
- 数组长度:11(索引0-10)
- 初始指针:
front = 0
,rear = 0
- 队列状态:空队列
2. 操作(1)A-E入队
- 入队规则:
rear = (rear + 1) % 11
- 元素存储位置:索引0→4依次存放A-E
- 最终状态:
front=0
,rear=5
3. 操作(2)A-B出队
- 出队规则:
front = (front + 1) % 11
- 指针变化:A出队后
front=1
,B出队后front=2
- 存储变化:实际存储元素为C(索引2), D(3), E(4)
4. 操作(3)F-J入队
- rear移动轨迹:5→6→7→8→9→10
- 新增元素位置:索引5-9依次存放F-J
- 最终状态:
front=2
,rear=10
5. 操作(4)O-R入队
- O入队:存入索引10,
rear=0
- P入队:存入索引0,
rear=1
- Q/R阻塞:此时
(rear+1)%11 = (1+1)%11 = 2
与front=2
相等,触发队列满条件
核心知识点
循环队列特性
- 队列满条件:
(rear + 1) % maxsize == front
- 空间利用率:长度为n的数组最多存储n-1个元素
- 指针移动规则:
- 入队:
rear = (rear + 1) % maxsize
- 出队:
front = (front + 1) % maxsize
- 入队:
本题关键数据
- maxsize = 11
- 最大容量 = 10元素
- 预留空间作用:区分队列满/空状态(均为
front=rear
时,空队列与满队列的判断依据不同)