基于数组的循环队列

定义

头尾相接的顺序存储结构

重难点

1 队列单指针(front指针)存储的不足:

入队是在队尾追加一个元素,复杂度O(1),出队则需要移动剩余的所有元素,复杂度O(n)

2 改为循环队列的两个关键指针:

front - 指向队头元素
rear - 指向队尾元素的下一个位置

3 队列空的条件:

front == rear

4 队列满的条件:

(rear + 1) % MAXSIZE = front
【实际上数组中仍有一个空的元素, 如果不保留,
则队列满的条件是front == rear, 与队列空重复,
此时也可以采用标志位来区别空与满,此类方法暂不讨论】

5 队列长度:
rear > front: rear-front
rear < front: (MAXSIZE - front) + (rear) = rear - front + MAXSIZE
综合以上两种情况: LENGTH = (rear - front + MAXSIZE) % MAXSIZE

6 指针移位操作
Q->rear = (Q->rear+1)%MAXSIZE; // rear指针向后移一位置,若到最后则转到数组头部
Q->front = (Q->front+1)%MAXSIZE; // front指针向后移一位置,* 若到最后则转到数组头部

原文地址:https://www.cnblogs.com/neen/p/13796230.html