基于数组的循环队列

定义

头尾相接的顺序存储结构

重难点

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指针向后移一位置,* 若到最后则转到数组头部

posted @ 2020-10-11 09:16  墨狮  阅读(109)  评论(0编辑  收藏  举报