雙端佇列deque的應用

2021-10-04 00:19:49 字數 1014 閱讀 9221

collections模組作為基礎資料型別的一種擴充套件,提供了更為豐富的資料結構支援。和list相比,雙端佇列deque在陣列的首部和尾部進行增加和刪除元素的時間複雜度都為o(1)。而list在陣列尾部進行操作的時間複雜度為o(1),在首部進行增加刪除資料的時間複雜度為o(n)(涉及到整個陣列元素的移動)。

deques支援執行緒安全,記憶體有效的在佇列兩端進行刪除增加元素操作,在任一方向上具有大致相同的o(1)效能。

類原型:collections.deque([iterable[, maxlen]]),若maxlen未設定或為none,則deque例項的長度可以擴充套件到任意長度。若指定了具體長度,當新元素從一端加入,且超出maxlen時,另一段的元素會彈出,以確保maxlen的固定值。

deque常用於保持固定長度的操作佇列,如下所示:

from collections import deque

def search(lines, pattern, history=5):

previous_lines = deque(maxlen=history)

for line in lines:

if pattern in line:

yield line, previous_lines

# example use on a file

if __name__ == '__main__':

with open('somefile.txt') as f:

for line, prevlines in search(f, 'python', 5):

for pline in prevlines:

print(pline, end='')

print(line, end='')

print('-'*20)

有界長度deques提供類似於unix中的tail過濾器的功能。 它們還可用於跟蹤僅涉及最近活動的事務和其他資料池。此外,deque索引訪問在兩端都是o(1),但在中間減慢到o(n)。 對於快速隨機訪問,請改用list。

雙端佇列deque的應用

collections模組作為基礎資料型別的一種擴充套件,提供了更為豐富的資料結構支援。和list相比,雙端佇列deque在陣列的首部和尾部進行增加和刪除元素的時間複雜度都為o 1 而list在陣列尾部進行操作的時間複雜度為o 1 在首部進行增加刪除資料的時間複雜度為o n 涉及到整個陣列元素的移動...

雙端佇列(deque)

區別於資料結構的雙端佇列,這裡的是stl的!雙端佇列 deque容器類 include與vector 類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與 vector不同的是,deque還支援從開始端插入資料 push front 此外deque 不支援與vector...

雙端佇列deque

雙端佇列deque容器是一種優化了的 在序列兩端對元素進行新增和刪除操作的基本序列容器。它也允許適度快速地進行隨機訪問 就像vector一樣,它也有乙個operator操作符,然而,它沒有vector的那種把所有的東西都儲存在一塊連續的記憶體塊中的約束。deque的典型實現是利用多個連續的儲存塊 同...