循环队列
先进先出,后进后出 :比如生活中的排队买票,先来的先买,后来的排队,最后一个最后一个买。
假如队列是一个固定长度的队列,而进来的元素都 只能 往队列的后面排,最终会排到队列的最后一个位置。而前面如果有元素已经出来空出了位置,但此时也没法让其他元素进来,出现了伪溢出的现象(虽然队列已经排到尾了,但前面还有空位),而循环队列就解决了这个问题。
当队列排到尾,而前面还有空位的话,那就从头开始进入。但队列依旧遵循先进先出的原则,性质并没有被改变。
循环队列需要以下的几个属性:
int maxSize :记录队列的最大容量
T[] arr :由于是固定长度,所以用数组来存储元素,而长度就根据maxSize来初始化
int front :记录队列中头元素的坐标
int rear :记录队列中末尾元素 的后一位坐标 (比如当前最后一个元素的坐标为2,则rear = 3)
判断 队空 :当front == rear 为空
判断 队满 :当 front == (rear+1) % maxSize 为满
情况一: 当 front<rear 时,size = rear - front;
情况二: 当 front > rear 时,size = rear + (maxSize-front)
为了方便,通过(rear + maxSize - front) % maxSize 公式来获取元素个数;