資料結構與演算法(極客時間 王爭)09丨佇列

2021-09-19 18:58:26 字數 1581 閱讀 2457

先進者先出,這就是典型的「佇列」。

棧:入棧:push()       出棧:pop()

佇列: 入隊:enqueue()    出隊:dequeue()

所以,佇列跟棧一樣,也是一種操作受限的線性表資料結構。

作為一種基本的資料結構,佇列應用非常廣泛,特別是具有一些額外特性的佇列,比如迴圈佇列、阻塞佇列、併發佇列。它們在很多偏底層系統、框架、中介軟體的開發中,起著關鍵性的作用。

同棧相同,用陣列實現的佇列叫作順序佇列,用鍊錶實現的佇列叫作鏈式佇列

順序佇列簡單**:

"""

queue based upon array

用陣列實現的佇列

author: wenru

"""from typing import optional

class arrayqueue:

def __init__(self, capacity: int):

self._items =

self._capacity = capacity

self._head = 0

self._tail = 0

def enqueue(self, item: str) -> bool:

if self._tail == self._capacity:

if self._head == 0:

return false

else:

for i in range(0, self._tail - self._head):

self._items[i] = self._items[i + self._head]

self._tail = self._tail - self._head

self._head = 0

self._items.insert(self._tail, item)

self._tail += 1

return true

def dequeue(self) -> optional[str]:

if self._head != self._tail:

item = self._items[self._head]

self._head += 1

return item

else:

return none

def __repr__(self) -> str:

return " ".join(item for item in self._items[self._head : self._tail])

比起棧的陣列實現,佇列的陣列實現稍微複雜一點。因為對於棧來說,我們只需要乙個棧頂指標就可以了。但是佇列需要兩個指標:乙個是head指標,指向隊頭;乙個是tail指標,指向隊尾。

資料結構與演算法(極客時間 王爭)05丨陣列

陣列 array 是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。1 線性表 顧名思義,線性表就是資料排成像一條線一樣的結構。每個線性表上的資料最多只有前和後兩個方向。還有鍊錶 棧和佇列。與之對應的是非線性表,比如二叉樹 堆 圖等。資料之間不是簡單的前後關係。2 連續的...

極客時間資料結構與演算法之美筆記7

鍊錶節點插入 new node next p next p next new node 鍊錶節點刪除 p next p next next 上述兩個鍊錶操作,對於空節點或者最後乙個節點場景,會有異常。帶有頭節點 哨兵節點 的鍊錶思路 這個思路形似用空間換時間。即用增加包裹節點換減少乙個判斷語句。減少...

09 資料結構與演算法 選擇排序

選擇排序 思路 遍歷整個列表,找到最小項的位置。如果該位置不是列表的第乙個位置,演算法就會交換這兩個位置的項 然後演算法回到第二個位置並重複這個過程 import random 定義乙個交換函式 def swap lyst,i,j temp lyst i lyst i lyst j lyst j t...