【循环队列】循环队列使用过程中的问题及解决方案

一、定义

  • 循环队列是用一个数组来实现队列,是对原来基础上的一个优化
  • 初始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种取值
  • 这两者的状态数量差异就造成了不能一一对应,.并且至少存在一个二对一的情况

三、解决方案

  1. 设置一个size变量,记录队列的大小,由此来区别空和满的情况
  2. 仅使用N-1的数组空间,当(rear+1)%MAXSIZE==front时,不在往队列里面加元素,就直接将队列满的那种情况抹去,避免了冲突