循环队列操作
题目要求
假设使用长度为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时,空队列与满队列的判断依据不同)