一、定义
- 循环队列是用一个数组来实现队列,是对原来基础上的一个优化
- 初始front=rear=-1,front表示队列的最前端的前一个位置,rear表示队列的最后一个位置
- 循环队列可以使得数组中的每一个空间都被充分利用
- 循环队列中的循环可以通过rear = (rear + 1) % MAXSIZE实现
- 举例如图(虽然有亿点点丑,凑合着看吧…)
二、存在的问题
问题:如何判断一个循环队列满了?
1.矛盾
当循环队列为空的时候,我们用front=rear来判断,但是我们发现当队列为满的时候front=rear也是满足的,于是就出现了矛盾
2.矛盾的原因
- 对于一个大小为N大小的数组而言,队列大小可以为0,1,2,…,N,总共N+1中状态
- 对于front和rear的表示方式在一个队列中,rear-front的值却只能有N种取值
- 这两者的状态数量差异就造成了不能一一对应,.并且至少存在一个二对一的情况
三、解决方案
- 设置一个size变量,记录队列的大小,由此来区别空和满的情况
- 仅使用N-1的数组空间,当(rear+1)%MAXSIZE==front时,不在往队列里面加元素,就直接将队列满的那种情况抹去,避免了冲突