前言
用順序表佇列操作,會遇到假溢位的現象(當隊尾=所限定元素個數),因此為了解決這種
假溢位的
現象,因此就引進了迴圈佇列(將佇列的頭和尾連線起來,構成環形)這種結構,便可以實現對佇列
的重複使用。
迴圈佇列——銀行排號
詳細**
#include#include#include#define size 4 //最大使用者數量
typedef struct
date;
typedef struct
cycqueue;
int num;
cycqueue *cycqueueinit (); //迴圈佇列初始化
int cycqueuefree(cycqueue *q); //釋放佇列
int cycqueuepush(cycqueue *q,date date); //入佇列
date *cycqueuepop(cycqueue *q); //出佇列
int add(cycqueue *q); //新增排隊人
int next(cycqueue *q); //為下乙個顧客服務
date *cycqueuepeek(cycqueue *q); //取佇列的頭元素
int cycqueuelen(cycqueue *q); //計算有多少人排隊
int main()
while(select!=0)
}cycqueuefree(queue);
getch();
return 0;
}cycqueue *cycqueueinit ()
else
return null;
}int cycqueuefree(cycqueue *q)
}int cycqueuepush(cycqueue *q,date date)
else }
date *cycqueuepop(cycqueue *q)
else
}int add(cycqueue *q)
else
printf("排隊人太多\n");
} int next(cycqueue *q)
if(q->tail!=q->head)
}date *cycqueuepeek(cycqueue *q)
else
}int cycqueuelen(cycqueue *q)
最重要的是判斷隊滿的條件,當構成迴圈佇列時,判斷隊列為空(p->head=p->tail),當迴圈佇列充滿時也是
(p->head == p->tail)這個條件,因此為了避免這種情況,就讓佇列差乙個元素充滿時,就判斷佇列以滿,
所以((p->head+1)%size == p->tail)判斷佇列已滿。
佇列 順序儲存結構,迴圈佇列
為什麼小甲魚上節課說佇列的實現上我們更願意用鏈式儲存結構來儲存?我們先按照應有的思路來考慮下如何構造佇列的順序儲存結構,然後發掘都遇到了什麼麻煩。我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的儲存單元,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端則是隊頭。no pic...
佇列 迴圈佇列 的順序儲存實現
佇列的順序儲存實現 1 佇列 一端進,另一端出 佇列由兩個引數決定,front 頭 rear 尾 頭指標指向頭乙個元素,尾指標指向指向最後乙個元素的下一儲存單元 若陣列長度為n,當元素個數為n 1時就認為佇列已滿。r指向最後乙個空的元素空間。出隊 頭指標往上移動,入隊 尾指標向上移動,故 靜態佇列只...
迴圈佇列(即順序儲存的佇列,元素迴圈儲存)
在邏輯上把順序儲存的佇列想象成乙個環,就是迴圈佇列。迴圈佇列仍是順序儲存,只是元素可以迴圈儲存在給定的儲存空間。前篇文章,順序儲存佇列基本操作 所描述的佇列的儲存空間只可以使用一次,在一些元素出隊之後,空出來的空間沒有辦法再次儲存,造成浪費,所以更多選擇迴圈佇列。兩者的記憶體中的儲存一樣,只是邏輯上...