1.循环队列的概念
为了克服顺序队列的“假上溢”现象,充分利用队列的存储空间,我们可以把队列想象成一个首尾相接的圆环,即将队列中的第一个元素接在最后一个元素的后面,我们称这样的队列为循环队列(Circular Queue),如图3-7所示。
![6457b9f4c875031d65e598f6aade5ad5.png](https://i-blog.csdnimg.cn/blog_migrate/7ac5b866dfdcb470b96bed6962f14cc2.jpeg)
循环队列入队、出队操作示意图
图3-7(a)为队列初始状态,front=0,rear=0。图3-7(b)中,A、B、C、D、E五个元素依次入队,front=0,rear=5。如果元素F继续入队,则队列空间就会被占满,变成如图3-7(c)所示的状态,此时,front=rear。若A、B、C、D、E、F相继出队,则队空,如图3-7(d)所示,此时,front=rear。
因此,在循环队列中,仅根据front=rear无法有效地判断队空还是队满,解决的方法是少用一个元素空间,约定当尾指针加1等于头指针时,认为是队满,可用求模运算来实现,即当(rear+1)%MaxSize=front时,称为队满,如图3-7(b),此时,循环队列中能装入的元素个数为MaxSize-1。当front=rear时,称为队空。