先進者先出,這就是典型的「佇列」。
棧:入棧: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...