資料結構與演算法 6 佇列

2021-10-01 17:50:05 字數 1223 閱讀 2314

引導

今天我們進入最後一章資料結構的學習–佇列。通過前面幾篇的學習,我們已經了解到了陣列,鍊錶,棧等資料結構。資料結構就是堆特定問題進行抽象話的東西,內容並不多。後面就開始介紹利用這些基礎的資料結構加上演算法來解決特定的問題。

佇列佇列和棧都是抽象的資料結構,是乙個操作受限的線性表。它的特點就是先進先出(fifo)。

它的操作又入隊(將乙個資料放到隊尾)和出隊(從佇列頭部取出乙個資料)。和棧相似,如圖:

順序佇列

佇列和棧一樣,都能用陣列和鍊錶來實現。用陣列實現就是順序佇列,用鍊錶實現就是鏈式佇列。我這裡就簡單用c語言實現乙個順序佇列。

queue_len = 100

int queue[queue_len]=;

head=0;

tail=0;

//隊空:head=tail;

//堆滿:head=0 tail=queue_len;

bool enqueue (int item)

else

return true;

}int dequeue()

該實現方式,出隊和入隊操作的複雜度都是o(1)。

迴圈佇列

在上面的佇列中,當tail等於佇列長度時,就需要進行資料搬移。迴圈佇列就是省去了這個操作。迴圈佇列的難點就在於如何確定佇列滿和佇列空

堆滿的判斷方式會浪費陣列中乙個元素。故迴圈佇列可按照下列實現:

queue_len = 100

int queue[queue_len]=;

head=0;

tail=0;

//隊空:head==tail;

//堆滿::(tail+1 % queue) == head;

bool enqueue (int item)

int dequeue()

佇列的用途

佇列一般用於快取操作。比如訊息佇列,執行緒池等都是使用了佇列。但是佇列的大小設定是需要我們關注的。我個人主要的考慮依據是:在可接受的反應時間內,將佇列設定到最大

總結本章介紹了佇列的概念,並實現了佇列和迴圈佇列。以及佇列大小設定的依據。到這裡,基本的資料結構就已經結束了。下面我們開始結合這些資料結構和一些演算法,來解決特定的問題。

資料結構6 佇列

二 迴圈隊 鏈式隊允許在一端插入,另一端刪除的表叫做隊,或佇列。隊尾 rear 允許插入的一端 隊頭 front 允許刪除的一端 first和last 分別是指向隊頭元素和隊尾元素進隊和出隊 特點 順序對基本用法 首尾指標法 尾指標後置 尾指標指是last指向隊尾的後乙個元素,元素載入last指標位...

修煉內功 資料結構與演算法6 佇列

通過 php 陣列實現的佇列 class queue 入隊 public function enqueue value array push this queue,value 出隊 public function dequeue array shift 將 array 的第乙個單元移出並作為結果返回...

資料結構與演算法(13) 佇列

定義 佇列是一種只能在一端插入 隊尾 在另一端刪除 隊首 的有序線性表。佇列的第乙個插入的元素也是第乙個被刪除的元素。所以,佇列是一種先進先出 fifo,first in first out 或後進後出 lilo,last in last out 線性表。佇列操作的專有名稱 向佇列中插入乙個元素,稱...