定义
头尾相接的顺序存储结构
重难点
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指针向后移一位置,* 若到最后则转到数组头部