所謂順序儲存結構就是用一組位址連續的儲存單元依次存放從隊頭到隊尾的元素。
宣告兩個指標rear
、front
分別用來指示隊尾元素的下一位置和隊頭元素的位置。
初始化時rear = front = 0
,插入新的元素時尾指標加1,元素出佇列時隊頭指標加1。
不過這樣做有個問題,不論是入隊還是出隊,隊頭或隊尾指標都是加1,這樣做有乙個問題,就是元素出隊所空出的空間無法被重新利用了。
儘管佇列中實際儲存的元素個數遠遠小於儲存空間的規模,但是仍不能做入隊操作。這種現象稱為假上溢。
迴圈佇列是佇列的順序儲存結構的一種實現方式。它通過將順序佇列想象為乙個首尾相接的圓環,來克服假上溢的問題。
迴圈佇列中無法通過頭尾指標相同來判斷佇列的狀態究竟為空還是滿,因為這種情況下可能為空也可能為滿。
迴圈佇列中通過少用乙個元素的空間,以「頭指標在尾指標的下一位置時」作為隊列為滿的判斷標誌。
#define maxqsize 100 //佇列最大長度
typedef struct sqqueue;
bool initqueue(sqqueue &q, int maxsize)
q.queuesize = maxsize;
q.front = q.rear = 0;
return true;
}bool enqueue(sqqueue &q, int e)
q.base[q.rear] = e;
q.rear = (q.rear + 1) % q.queuesize;
return true;
}bool dequeue(sqqueue &q, int &e)
e = q.base[q.front];
q.front = (q.front + 1) % q.queuesize;
return true;
}
如果rear = front
,則可以判斷隊列為空
如果(rear + 1) % size == front
,則可判斷佇列已滿
(rear - front + size) % size
為佇列長度
資料結構 佇列 迴圈佇列
在佇列的陣列實現中,我們很容易發現數在出隊後,陣列的前面部分會有剩餘空間沒有被使用,所以我們為了最大程度的利用固定長度的陣列,我們採用迴圈佇列的儲存方式,這種方式的最大問題在於resize的時候比較麻煩,所以我們不考慮resize的情況。基本結構如下,這裡front指向第乙個元素的位置,rear指向...
資料結構 佇列 迴圈佇列
資料結構 佇列 迴圈佇列 順序儲存 犧牲乙個空間單元來判段佇列滿狀態。q.front q.rear 1 initsize date 2017 4 16 include define elemtype char define initsize 100 typedef structsqqueue voi...
資料結構 迴圈佇列
設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於 fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為 環形緩衝器 迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是...