資料結構(2) 隊

2021-06-18 04:48:25 字數 1381 閱讀 1548

隊(queue)

前一篇講了棧(stack),隊和棧其實只有乙個差別,棧是先進後出,隊是先進先出,如圖:

從圖中可以看出,隊有兩個常用的方法,enqueue和dequeue,顧名思義,就是進隊和出隊了。隊和棧一樣,既可以用陣列實現,也可以用鍊錶實現,我還是偏向於用陣列,我的實現示意圖如下:

隊有啥用呢?乙個最常用的用途就是「buffer」,即緩衝區,比如有一批從網路來的資料,處理需要挺長的時間,而資料抵達的間隔並不均勻,有時快,有時慢,先來的先處理,後來的後處理,於是你建立了乙個隊,用來快取這些資料,出隊一筆,處理一筆,直到隊列為空。當然隊的作用遠不止於此,下面的例子也是乙個很經典的例子,希望讀者能舉一反三。

例子:使用隊對樹進行廣度優先遍歷。

廣度優先區別於深度優先,即優先遍歷最靠近根節點的各個節點:

我們的演算法是:

1,根節點入隊

2,出隊乙個節點,算一次遍歷,直到隊列為空

3,將剛出隊的節點的子節點入隊

4,轉到2

佇列的狀況如下圖:

樹的遍歷一般習慣使用遞迴,理論上所有的遞迴都可以轉變為迭代,如何實現這個轉變?隊就是其中一種有效的辦法,ok,下面我給出上述例題的**以及注釋。

//not grace code but enough for demo. ^_^

#include "stdio.h"

// the node

//struct node

;node::node(char cchar, int isubnodenum)

node::~node()

// the queue

//class queue

;queue::queue(int iamount)

queue::~queue()

int queue::enqueue(node* node)

else

return 0;

}int queue::dequeue(node* & node)

else

return 0;

}// main

//int main(int argc, char* argv)

}return 0;

}

資料結構 隊

1 隊的定義 1.1 隊 只允許在一端進行插入,在另一端進行刪除的操作的線性表,又稱為先進先出 first in first out 線性表,簡稱fifo 1.2 隊的相關概念 隊頭 允許進行刪除操作的一端 隊尾 允許進行插入操作的一端 空隊 不含任何資料元素的隊 1.3 隊的操作 入隊 在隊尾新增...

資料結構 隊queue

實現 所以實現佇列只需要提供隊前刪除的方法和對尾插入的方法 可以通過陣列實現,也可以通過鍊錶實現,jdk中arraydeque是通過陣列實現的佇列 雙向佇列 linkedlist,則是通過雙向鍊錶實現的佇列 可以作為棧來看 具體實現略 jdk中的隊體系 常見 繼承於collection介面的queu...

python 實現資料結構 lesson 2 佇列

佇列 queue 是較為容易理解的概念,就像買票排隊一樣,先進先出,新來的人排到隊尾,最早到的人最先出列。如下 coding utf 8 classqueue object def init self size self.size size self.queue defget size self r...