兩種常用的佇列

2022-05-02 23:06:12 字數 1296 閱讀 6611

與棧相反,佇列是一種先進先出的線性表。它只允許在表的一端進行插入,而在另一端刪除元素。

和線性表類似,佇列也可以有兩種儲存表示。

用鍊錶表示的佇列簡稱鏈佇列。下面是帶頭結點的單鏈佇列的實現

1 #include 2 #include 

34 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

view code

佇列的順序表示一般實現為迴圈佇列。下面是迴圈佇列的實現

因為q.front=q.rear不能區分佇列是空還是滿,所以下面採用少用乙個元素空間來解決這個問題。

1 #include 2 #include 

3#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

view code

訊息佇列的兩種模式

支援訂閱組的發布訂閱模式 發布訂閱模式下,當發布者訊息量很大時,顯然單個訂閱者的處理能力是不足的。實際上現實場景中是多個訂閱者節點組成乙個訂閱組負載均衡消費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...