(一)迴圈佇列

2021-06-28 23:18:09 字數 1308 閱讀 6354

佇列可以使用陣列或者鍊錶實現,這裡介紹一種使用陣列實現的迴圈佇列。

所謂迴圈佇列,是指當尾指標超過陣列索引界限時,通過取餘運算返回陣列起始端,只要保證尾指標和頭指標不相遇,就可以繼續儲存元素。

首先設定佇列的大小,並建立佇列結構體:

#define maxsize 100001

typedef struct queue;

設頭指標和尾指標指向同一索引時隊列為空,起始時均在索引0處。

void initqueue(queue *q)

入隊操作是先檢查rear指標前進後是否會和front指標相遇,如果會相遇則直接返回,並輸出錯誤:佇列已滿。

注意要對maxsize取餘,實現迴圈:

void addq(queue *q, int item)

q->rear = (q->rear + 1) % maxsize;

*(q->items + q->rear) = item;

}

出隊操作是先檢查front和rear是否相等,否則隊列為空,如果不空,則先將front後移,然後將front位置的元素返回:

int deleteq(queue *q)

q->front = (q->front + 1) % maxsize;

return *(q->items + q->front);

}

注意入隊是先判斷後移是否相遇來判斷是否為滿再執行操作,操作方法為指標後移然後在指標處存入元素;出隊時是先判斷是否相遇來判斷是否為空,操作方法為指標後移然後在指標處存入元素。

在先移動指標再操作指標處元素、rear和front相等為空這兩個約定下,可以實現迴圈佇列。

完整**為:

#define maxsize 100001

typedef struct queue;

void initqueue(queue *q)

bool isempty(queue *q)

void addq(queue *q, int item)

q->rear = (q->rear + 1) % maxsize;

*(q->items + q->rear) = item;

}int deleteq(queue *q)

q->front = (q->front + 1) % maxsize;

return *(q->items + q->front);

}

佇列 迴圈佇列

迴圈佇列是乙個大小確定的特殊佇列,它的特殊體現在迴圈,之前提到的普通佇列,我們是用鍊錶來實現的,在這裡,由於迴圈佇列是乙個長度確定的佇列,所以我們可以拿順序表來實現。迴圈佇列的操作與普通佇列類似,不過不同的地方在於當rear走到capacity 1並且front在0號元素位置的時候,當此時再有元素入...

佇列(一)迴圈佇列的線性儲存

include define false 0 define ok 1 define maxsize 5 定義乙個佇列結構 typedef struct sqqueue sqqueue 建立乙個空佇列 void initqueue sqqueue l 向佇列插入元素 int inqueue sqque...

迴圈佇列 622 設計迴圈佇列

設計你的迴圈佇列實現。迴圈佇列是一種線性資料結構,其操作表現基於fifo 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...