日期:2023年8月5日
前言
雙向佇列 (double-ended queue, deque) 的性質與佇列很像,但是可以從最前面或最後面填入、取出資料,可以涵蓋 queue 及 stack 的功能。以下是在 Python 及 C++ 的實作方法。
Python 方法1:引入 collections 函式庫中的 deque
要先引入函式庫,函式庫的官方說明書在此 class collections.deque。
from collections import deque
建立雙向佇列
語法為
雙向佇列名稱 = deque(資料, maxlen=長度)
如果不輸入資料,會先建立空的雙向佇列,之後再填入資料。maxlen 可以不加,預設值為 None,如果有設定 maxlen,當雙向佇列已滿且要從最後面填入新資料時,會將最前面的資料推出去;反之,當雙向佇列已滿且要從最前面填入新資料時,會將最後面的資料推出去。以下的程式碼會建立名稱為 q、資料為 [0, 1, 2]、maxlen 為3的雙向佇列。
q = deque([0, 1, 2], maxlen=3)
如果想要知道 q 的內容,只要用 print 就可以了
print(q)
輸出內容為
deque([0, 1, 2], maxlen=3)
從最前面填入資料
語法為
雙向佇列名稱.appendleft(資料)
當雙向佇列已滿且要從最前面填入新資料時,會將最後面的資料推出去,例如以下的程式碼
q = deque([0, 1, 2], maxlen=3)
q.appendleft(3) # q 的內容變為 [3, 0, 1]
如果沒有限制雙向佇列最大長度,例如以下的程式碼
q = deque([0, 1, 2])
q.appendleft(3) # q 的內容變為 [3, 0, 1, 2]
從最後面填入資料
語法為
雙向佇列名稱.append(資料)
當雙向佇列已滿且要從最後面填入新資料時,會將最前面的資料推出去,例如以下的程式碼
q = deque([0, 1, 2], maxlen=3)
q.append(3) # q 的內容變為 [1, 2, 3]
如果沒有限制雙向佇列最大長度,例如以下的程式碼
q = deque([0, 1, 2])
q.append(3) # q 的內容變為 [0, 1, 2, 3]