python 數據結構
隊列
隊列定義
隊列是一種先進先出的數據結構,Queue是python標準庫中線程安全的隊列FIFO實現
隊列基本操作
創建一個隊列
Queue.Queue實現一個隊列的創建,參數maxsize控制隊列的長度,當maxsize<1,則隊列無限長
import Queue
myqueue = Queue.Queue(maxsize=10)
向隊列中插入數據
數據將插入隊列尾部
from queue import Queue
q = Queue(2) #允許隊列中最多包含兩個數據
q.put(3)
q.put(4) #向隊列中插入3和4
q.put(5, timeout=2) #此時隊列長度已滿,插入5時,由於設置了timeout
#2秒後會raise 一個 FULL的報錯,否則會處於阻塞狀態
取出隊列中的數據
自隊列頭部取出數據
q.get() #取出隊列頭部的數據,即3
獲取隊列長度
q.qsize()
判斷隊列爲空或滿
q.empty() #若隊列爲空則返回True,否則返回False
join()與task_done()的區別
Queue.task_done() 在完成一項工作之後,Queue.task_done()函數向任務已經完成的隊列發送一個信號
Queue.join() 實際上意味着等到隊列爲空,再執行別的操作
雙向隊列
創建雙向隊列
from collentions import deque
dq = deque(maxlen=10) #maxlen定義雙向隊列可容納元素數量,一旦設定無法更改
雙向隊列的旋轉操作
dq.rotate(-2) #當n<0時,隊列最**左**邊的n個元素會被移動到隊列**右**邊 ,e.g.[1,2,3,4,5]--->[3,4,5,1,2]
dq.rotate(2) #當n>0時,隊列最**右**邊的n個元素會被移動到隊列**左**邊 ,e.g.[1,2,3,4,5]--->[5,4,1,2,3]
其他隊列
Python提供的所有隊列類型 :
FIFO 先進先出隊列 queue.Queue(maxsize)
LIFO 後進先出隊列 queue.LifoQueue(maxsize) (Queue的基礎上進行的封裝)
優先級隊列 queue.PriorityQueue(maxsize) (Queue的基礎上進行的封裝)
雙向隊列 queue.deque