資料結構 考研 迴圈佇列處理隊滿和隊空的三種方式

2021-10-09 05:44:21 字數 1339 閱讀 3172

順序儲存的佇列在隊滿時再進隊出現的溢位往往是假溢位,即還有空間但用不上,為了有效利用佇列空間,可將佇列元素存放陣列首尾相接,形成迴圈佇列。

但是構造迴圈佇列時不得不考慮到的問題就是如果不加以限制,隊空和隊滿的情況是相同的。即隊頭指標和隊尾指標的指向相同。

一般來說有以下三種解決方式:

犧牲乙個單元來區分隊空和隊滿,也是普遍在利用的方式。

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

隊空:front == rear

隊長:(rear - front + queuesize)% queuesize

#includeusing namespace std;

#define maxsize 100

typedef structsqqueue;

//判滿

bool queuefull(sqqueue q)

//判空

bool queueempty(sqqueue q)

//進隊

bool enqueue(sqqueue &q,int x)

//出隊

bool dequeue(sqqueue &q,int& x)

//隊大小

int queuesize(sqqueue q)

int main()sqqueue;

//隊大小

int queuesize(sqqueue q)

//判滿

bool queuefull(sqqueue q)

//判空

bool queueempty(sqqueue q)

//進隊

bool enqueue(sqqueue &q,int x)

//出隊

bool dequeue(sqqueue &q,int& x)

int main()sqqueue;

//判滿

bool queuefull(sqqueue q)

//判空

bool queueempty(sqqueue q)

//進隊

bool enqueue(sqqueue &q,int x)

//出隊

bool dequeue(sqqueue &q,int& x)

//隊大小

int queuesize(sqqueue q)

int main(){

sqqueue q;

cout執行結果:

迴圈佇列隊滿和隊空判定

假設迴圈佇列的隊尾指標是rear,隊頭是front,其中queuesize為迴圈佇列的最大長度。1 入隊時隊尾指標前進1 rear 1 queuesize 2 出隊時隊頭指標前進1 front 1 queuesize 例1,例2 3 佇列長度 rear front queuesize queuesi...

資料結構 佇列和迴圈佇列

線性結構 只能從一端新增元素,從另外一端取出元素 先進先出 fifo 時間複雜度o 1 出隊時間複雜度o n public class arrayqueueimplements queue public arrayqueue override public int getsize override ...

資料結構 03佇列與迴圈佇列

佇列queue,是乙個有序列表,可以用陣列和鍊錶實現 先進先出,如銀行業務辦理 用陣列模擬佇列 隊尾 rear rear會隨著資料的輸入而不斷增加 隊首 front front會隨著資料的輸出而不斷增加 佇列的長度 rear front 1 最大容量 maxsize 注 這張圖有問題,而且,fron...