1. 程式人生 > 其它 >佇列的順序表示和實現 01

佇列的順序表示和實現 01

初始的情況下,隊列當眾一個元素都沒有,讓 front = rear = 0

如果有元素入隊,要存放在 rear 所指位置,然後 rear++

出隊時,則需要從 front 指向元素開始,出一個,然後 front++

-------------------------------------------------------------------------------------

問:如下圖情況下,還有元素可以入隊嗎

下標:Q ~ MAXQSIZE - 1

設陣列大小為 MAXQSIZE,rear = MAXQSIZE 時,發生溢位

真溢位:若 front = 0,rear = MAXQSIZE 時再入隊為真溢位

假溢位:若 front ≠ 0,rear = MAXQSIZE 時再入隊為假溢位

解決假上溢的辦法:

① 將隊中元素依次向隊頭方向移動

缺點:浪費時間,每移動一次,隊中元素都要移動。

② 將隊空間設想成一個迴圈的表,即分配給佇列的 m 個儲存單元可以迴圈使用,當 rear 為 maxqsize 時,

若向量的開始端空著,又可以從頭使用空著的空間。當 front 為 maxqsize 時,也是一樣。如圖:

引入迴圈佇列:base[0] 接在 base[MAXQSIZE - 1] 之後,若 rear+1 == MAXQSIZE,則令 rear = 0

實現方法:利用模(mod,C語言中:%)運算

插入元素:Q.base[Q.rear] = x;

Q.rear = (Q.rear + 1) % MAXQSIZE;

刪除元素:x = Q.base[s.front]

Q.front = (Q.front + 1) % MAXQSIZE;

迴圈佇列:迴圈適用位佇列分配的儲存空間。

這種情況下,如何處理隊空和隊滿:

① 另外設一個標誌區別隊空、隊滿

② 另設一個變數,記錄元素個數

③ 少用一個空間

隊滿:(rear+1) % MAXQSIZE == front

頭指標加1對最高限制取餘其結果為front,也就是滿了