順序儲存的佇列在隊滿時再進隊出現的溢位往往是假溢位,即還有空間但用不上,為了有效利用佇列空間,可將佇列元素存放陣列首尾相接,形成迴圈佇列。
但是構造迴圈佇列時不得不考慮到的問題就是如果不加以限制,隊空和隊滿的情況是相同的。即隊頭指標和隊尾指標的指向相同。
一般來說有以下三種解決方式:
犧牲乙個單元來區分隊空和隊滿,也是普遍在利用的方式。
隊滿:(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...