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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章