Bootstrap

数据结构学习笔记——队列

顺序存储

(1)初始化(队空条件):Q.front == Q.rear == 0;
(2)进队时队尾指针向后移动,出队时队头指针向后移动,因此可能会出现两个指针挤在数组末尾,造成上溢,这种溢出不是真正的溢出,数组中还有存放空间,因此成为“假溢出”;
(3)队尾入队,队头出队。

循环队列

(1)解决了假溢出的弊端;
(2)初始化(队空条件):Q.front == Q.rear == 0;
(3)出队:队首指针进1:Q.front =(Q.front + 1) % MaxSize;
(4)入队:队尾指针进1:Q.rear = (Q.rear +1) % MaxSize;
(5)队列长度:( Q.rear + MaxSize - Q.front ) % MaxSize;
(6)出队或入队指针都按顺时针方向进1。

判断队满

(1)牺牲一个单元:队头指针在队尾指针的下一个位置作为队满的标志,即(Q.rear+1) %  MaxSize == Q.front;
(2)增加元素个数的数据成员:Q.size == MaxSize 时队满,此时 Q.front == Q.rear;
(3)增设tag成员:tag == 0时:若因删除导致 Q.front == Q.rear,为队空;tag == 1时;若因插入导致 Q.front == Q.rear,为队满。

链式队列

(1)判空:Q.front == NULL && Q.rear == NULL;
(2)初始化两个指针都指向头结点;
(3)front始终指向头结点,rear始终指向最后一个结点。

双端队列

(1)两边都能入队出队;
(2)输出受限:两端只有一端能出;
(3)输入受限:两端只有一端能进。

;