隊列是一種先進先出(First-In-First-Out,FIFO)的數據結構。隊列被用在不少地方,好比提交操做系統執行的一系列進程、打印任務池等,一些仿真系統用隊列來模擬銀行或雜貨店裏排隊的顧客。下面就介紹了Python中隊列的應用實戰,須要的能夠參考。前端
隊列(queue)python
隊列是先進先出(FIFO, First-In-First-Out)的線性表,在具體應用中一般用鏈表或者數組來實現,隊列只容許在後端(稱爲rear)進行插入操做,在前端(稱爲front)進行刪除操做,隊列的操做方式和堆棧相似,惟一的區別在於隊列只容許新數據在後端進行添加(摘錄維基百科)。算法
如圖所示後端
隊列的接口數組
一個隊列至少須要以下接口:數據結構
接口 | 描述 |
---|---|
add(x) | 入隊 |
delete() | 出隊 |
clear() | 清空隊列 |
isEmpty() | 判斷隊列是否爲空 |
isFull() | 判斷隊列是否未滿 |
length() | 隊列的當前長度 |
capability() | 隊列的容量 |
然而在Python中,可使用collections模塊下的deque函數,deque函數提供了隊列全部的接口,那麼先讓我門看看隊列deque函數提供了那些API把:app
collections.deque
是雙端隊列,即左右兩邊都是可進可出的函數
方法 | 描述 |
---|---|
append(x) | 在隊列的右邊添加一個元素 |
appendleft(x) | 在隊列的左邊添加一個元素 |
clear() | 從隊列中刪除全部元素 |
copy() | 返回一個淺拷貝的副本 |
count(value) | 返回值在隊列中出現的次數 |
extend([x..]) | 使用可迭代的元素擴展隊列的右側 |
extendleft([x..]) | 使用可迭代的元素擴展隊列的右側 |
index(value, [start, [stop]]) | 返回值的第一個索引,若是值不存在,則引起ValueError。 |
insert(index, object) | 在索引以前插入對象 |
maxlen | 獲取隊列的最大長度 |
pop() | 刪除並返回最右側的元素 |
popleft() | 刪除並返回最左側的元素 |
remove(value) | 刪除查找到的第一個值 |
reverse() | 隊列中的全部元素進行翻轉 |
rotate() | 向右旋轉隊列n步(默認n = 1),若是n爲負,向左旋轉。 |
如今咱們在Python中測試下這些個API的使用吧。學習
入隊操做測試
出隊操做
其餘的API
實例
二項式係數
題目
編寫程序,求二項式係數表中(楊輝三角)第K層系列數
思路
解決代碼
劃分無衝突子集
題目
某動物園搬家,要運走N種動物,老虎與獅子放在一塊兒會你們,大象與犀牛放在一個籠子會打架,野豬和野狗放在一個籠子裏會打架,如今須要咱們設計一個算法,使得裝進同一個籠子的動物互相不打架。
思路
解決代碼
數字變換
題目
對於一對正整數a,b,對a只能進行加1,減1,乘2操做,問最少對a進行幾回操做能獲得b?
例如:
思路
本題用廣度優先搜索,尋找a到b狀態遷移最短路徑,對於每一個狀態s,能夠轉換到撞到s+1,s-1,s*2:
解決代碼