佇列可以使用陣列或者鍊錶實現,這裡介紹一種使用陣列實現的迴圈佇列。
所謂迴圈佇列,是指當尾指標超過陣列索引界限時,通過取餘運算返回陣列起始端,只要保證尾指標和頭指標不相遇,就可以繼續儲存元素。
首先設定佇列的大小,並建立佇列結構體:
#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 先進先出 原則並且隊尾被連線在隊首之後以形成乙個迴圈。它也被稱為環形緩衝器。迴圈佇列的乙個好處是我們可以利用這個佇列之前用過的空間。在乙個普通佇列裡,一旦乙個佇列滿了,我們就不能插入下乙個元素,即使在佇列前面仍有空間。但是使用...