與棧相反,佇列是一種先進先出的線性表。它只允許在表的一端進行插入,而在另一端刪除元素。
和線性表類似,佇列也可以有兩種儲存表示。
用鍊錶表示的佇列簡稱鏈佇列。下面是帶頭結點的單鏈佇列的實現
1 #include 2 #includeview code34 typedef char
qelemtype;5//
單鏈佇列節點
6 typedef struct
qnode
7qnode,*queueptr;
11//
單鏈佇列
12 typedef struct
13linkqueue;
1718
//初始化單鏈佇列
19void initqueue(linkqueue &q)
2024
25//
銷毀單鏈佇列
26void destroyqueue(linkqueue &q)
2734}35
36//
入佇列37
void enqueue(linkqueue &q,qelemtype e)38
4546
//出佇列
47bool dequeue(linkqueue &q,qelemtype &e)
48
佇列的順序表示一般實現為迴圈佇列。下面是迴圈佇列的實現
因為q.front=q.rear不能區分佇列是空還是滿,所以下面採用少用乙個元素空間來解決這個問題。
1 #include 2 #includeview code3#define maxqsize 100 //
最大佇列長度
45 typedef char
qelemtype;6//
定義迴圈佇列
7 typedef struct
8sqqueue;
1314
//初始化
15void initqueue(sqqueue &q)16
2021
//獲取佇列的長度
22int
queuelength(sqqueue q)23
2627
//入佇列
28bool enqueue(sqqueue &q,qelemtype e)29
3738
//出佇列
39bool dequeue(sqqueue &q,qelemtype &e)
40
訊息佇列的兩種模式
支援訂閱組的發布訂閱模式 發布訂閱模式下,當發布者訊息量很大時,顯然單個訂閱者的處理能力是不足的。實際上現實場景中是多個訂閱者節點組成乙個訂閱組負載均衡消費topic訊息即分組訂閱,這樣訂閱者很容易實現消費能力線性擴充套件。可以看成是乙個topic下有多個queue,每個queue是點對點的方式,q...
迴圈佇列的兩種寫法
首先說一下主要思路 迴圈佇列的關鍵就是區別佇列滿和空的 兩個條件,因為是迴圈佇列,空和滿狀態會是相同的!至於迴圈方式可以採用乙個空閒單位的方式 x 1 maxsize,1其實就浪費了maxsize 1索引儲存的資料。好了不多說看下寫法吧!下面展示一下第一種寫法。第一種寫法,比較普遍,這就是空閒單位法...
迴圈佇列的兩種實現方法
順序儲存結構 示意圖參考嚴蔚敏版 資料結構 順序儲存為何宜選迴圈佇列?佇列的順序表儲存中,除了資料域dat adata data 還應附設兩個座標fro ntfront front和rea rrear rear 用來記錄頭結點和尾結點的位置。對於pop poppo p操作,依靠 fro nt 1 f...