1
《数据结构(C++版)》复习提要与实验指导
1.6.1.6 3.1.6 循环队列

3.1.6 循环队列

1. 从顺序队列改为循环队列要解决的问题

(1) 如何形成环——利用求模运算

原顺序队列入队操作为:q->rear++;

现循环队列入队操作为:q->rear=(q->rear+1)%MaxSize;

原顺序队列出队操作为:q->front++;

现循环队列出队操作为:q->front=(q->front+1)%MaxSize;

(2) 如何区分队空和队满——损失一个存储单元

利用求模运算形成首尾相接的圆环后,q->front==q->rear有两种含义:

①若是头指针追上尾指针,表示队空;

②若是尾指针追上头指针,则表示队满。

从而造成区分的困难。解决的方法是:牺牲一个单元不用,当尾指针还差一个单元就追上头指针时,就认为是队满,从而有:

判别队空的条件不变:q->front==q->rear;

判别队满的条件为:(q->rear+1)%MaxSize==q->front

2. 循环队列的5种基本操作的实现

(1) 置队空SetNull(Q)

img61

}

(2) 判队空Empty(Q)

img62

(3) 取队头元素GetFront(Q)

img63

(4) 入队EnQueue(Q,x)

img64

(5) 出队DeQueue(Q)

img65