problem-solving-with-algorithms-and-data-structure-usingpython(使用python解決算法和數據結構) -- 基本數據結構 -- 隊列

1. 什麼是隊列?python

隊列是項的有序結合,其中添加新項的一端稱爲隊尾,移除項的一端稱爲隊首。ide

FIFO:先進先出spa

2. 隊列抽象數據類型code

隊列操做以下:blog

Queue() 建立一個空的新隊列。 它不須要參數,並返回一個空隊列。 enqueue(item) 將新項添加到隊尾。 它須要 item 做爲參數,並不返回任何內容。 dequeue() 從隊首移除項。它不須要參數並返回 item。 隊列被修改。 isEmpty() 查看隊列是否爲空。它不須要參數,並返回布爾值。 size() 返回隊列中的項數。它不須要參數,並返回一個整數。

3. python實現隊列隊列

class Queue: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def enqueue(self,item): self.items.insert(0,item) def dequeue(self): return self.items.pop() def size(self): return len(self.items)

4. 模擬:燙手山芋遊戲

在這個遊戲中,孩子們圍成一個圈,並儘量快的將一個山芋遞給旁邊的孩子。在某一個時間,動做結束,有山芋的孩子從圈中移除。遊戲繼續開始直到剩下最後一個孩子。
燙手山芋遊戲介紹
假設拿着山芋的孩子在隊列的前面。當拿到山芋的時候,這個孩子將先出列再入隊列,把他放在隊列的最後。通過 num 次的出隊入隊後,前面的孩子將被永久移除隊列。而且另外一個週期開始,繼續此過程,直到只剩下一個名字(隊列的大小爲 1)。
from pythonds.basic.queue import Queue def hotPotato(nameList,num): simqueue = Queue() for name in nameList: simqueue.enqueue(name) while simqueue.size() > 1: for i in range(num): simqueue.enqueue(simqueue.dequeue()) simqueue.dequeue() return simqueue.dequeue() print(hotPotato(["Bill", "David", "Susan", "Jane", "Kent", "Brad"], 7))

 

相關文章
相關標籤/搜索