队列 -- 循环队列

实现队列的方法有很多,比如链表,动态数组等,这里主要介绍一下循环队列,首先我们用静态数组做个简单的队列:
队列 -- 循环队列_第1张图片

从上图很显然可以看出,全部出队后,将无法继续入队,这样的情况也叫做“假溢出”,即使数组中,明明还有空间可以利用,但是却无法使用。为了解决这样的问题,就引入了一个叫“循环队列”这么一个方法。那么什么叫循环队列呢?
循环队列定义:
为了克服顺序队列中假溢出,通常将一维数组Queue[0]到Queue[MAXSIZE - 1]看成是一个首尾相连接的圆环,即Queue[0]与Queue[MAXSIZE - 1]相连接在一起,将这样形式的队列成为循环队列。

S1循环队列示例图:
队列 -- 循环队列_第2张图片
S2循环队列各个参数的含义:
1)队列初始化
        front和rear的值都是零。
2)队列非空
        front代表的是队列的第一个元素。
        rear代表的是队列的最后一个元素的下一个元素。
3)队列空
        front和rear的值相等,不一定为零。

S3循环队列入队的伪算法:
1)将值存入rear所代表的位置。
2)rear = (rear + 1) % 数组的长度。

S4循环队列出队的伪算法:
1)取出front所代表位置的值。
2)front = (front + 1) % 数组长度。

S5如何判断循环队列为空:
1)如果front与rear的值相等,那么该循环队列为空队列。

S6如何判断循环队列已满:
1)通常使用两种方式
1.多增加一个标识参数。
2.如果 (rear + 1) % 数组长度 == front 那么,已满。

S7循环队列部分代码


队列 -- 循环队列_第3张图片
队列 -- 循环队列_第4张图片
队列 -- 循环队列_第5张图片
队列 -- 循环队列_第6张图片
队列 -- 循环队列_第7张图片
队列 -- 循环队列_第8张图片

你可能感兴趣的:(队列 -- 循环队列)