建立空的雙端佇列:
dl = deque()
建立帶元素的雙端佇列:
dl = deque([1, 2, 3, 4])
向佇列中新增元素(預設右側新增):
左側新增元素:
向佇列新增列表元素:
dl.extend([6, 7]) # deque([0, 1, 2, 3, 4, 5, 6, 7])
在左側新增列表元素:
dl.extendleft([-2, -1]) # deque([-1, -2, 0, 1, 2, 3, 4, 5, 6, 7]) ,注意新增的順序
使用.pop()會預設在佇列右側刪除乙個元素:
dl.pop() # 7 => deque([-1, -2, 0, 1, 2, 3, 4, 5, 6])
使用.popleft()左側刪除元素:
dl.popleft() # -1 deque([-2, 0, 1, 2, 3, 4, 5, 6]) 注意會返回被刪除的元素
根據值刪除元素:
dl.remove(1) # deque([-2, 0, 2, 3, 4, 5, 6])
反轉佇列:
dl.reverse() # deque([6, 5, 4, 3, 2, 0, -2])
extend: 只能新增乙個列表,意即擴充套件列表
在建立deque時使用maxlen引數來限制deque的大小:
from collections import deque
d = deque(maxlen=3) # 限制只能增加3個元素
注意,乙個列表物件在佇列中算乙個,如下:
from collections import dequed = deque(maxlen=3) # 限制只能增加3個元素
print(d)
# deque([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]], maxlen=3) 可以放入3個列表
deque是唯一具有快速佇列操作特性的python資料結構,其乙個基本用例是廣度優先搜尋:
from collections import deque
def bfs(graph, root):
distances = {}
distances[root] = 0
q = deque([root])
while q:
# 最早看到(但尚未訪問)的節點將是最左邊的節點
current = q.popleft()
for neighbor in graph[current]:
if neighbor not in distances:
distances[neighbor] = distances[current] + 1
# 當我們看到乙個新節點時,我們將其新增到佇列的右側
return distances
假設我們現在有乙個簡單的有向圖:
graph =
我們現在可以求出從某個起始位置開始的距離:
bfs(graph, 1)
#輸出:
bfs(graph, 3)
#輸出:
以上內容來自創帆雲整理
雙端佇列(deque)
區別於資料結構的雙端佇列,這裡的是stl的!雙端佇列 deque容器類 include與vector 類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與 vector不同的是,deque還支援從開始端插入資料 push front 此外deque 不支援與vector...
雙端佇列deque
雙端佇列deque容器是一種優化了的 在序列兩端對元素進行新增和刪除操作的基本序列容器。它也允許適度快速地進行隨機訪問 就像vector一樣,它也有乙個operator操作符,然而,它沒有vector的那種把所有的東西都儲存在一塊連續的記憶體塊中的約束。deque的典型實現是利用多個連續的儲存塊 同...
deque雙端佇列
deque 1 生成構造 constructing deques include include int main std deque fifth myints,myints sizeof myints sizeof int fifth std deque first 3 deque with 3 ...