佇列的簡單應用
佇列應用實戰
佇列是有序集合,新增操作發生在尾部,移除操作發生在頭部,和棧幾乎相反,最新新增的元素必須在佇列的尾部等待,就像排隊買東西一樣,計算機執行任務也是相同的原理
佇列支援以下操作
操作方法
queue()建立乙個空佇列
enqueue(item)在佇列的尾部新增乙個元素
dequeue()從佇列的頭部移除乙個元素.並返回值
isempty()檢查佇列是否為空
size()返回佇列中的元素數目
但是需要我們自己用python建立乙個佇列的類
class
queue()
:def
__init__
(self)
: self.items =
defisempty
(self)
:return self.items ==
defenqueue
(self, item)
: self.items.insert(
0, item)
defdequeue
(self)
:return self.items.pop(
)def
size
(self)
:return
len(self.items)
我們需要用queue包中的queue來呼叫佇列,函式在使用時略有不同。
queue.qsize() 返回佇列的大小
queue.empty() 如果隊列為空,返回true,反之false
queue.full() 如果佇列滿了,返回true,反之false
queue.full 與 maxsize 大小對應
queue.get([block[, timeout]]) 獲取佇列,timeout等待時間
queue.get_nowait() 相當queue.get(false)
非阻塞 queue.put(item) 寫入佇列,timeout等待時間
queue.put_nowait(item) 相當queue.put(item, false)
queue.task_done() 在完成一項工作之後,queue.task_done() 函式向任務已經完成的佇列傳送乙個訊號
queue.join() 實際上意味著等到隊列為空,再執行別的操作
這裡我們簡單的用乙個傳土豆遊戲來進行實踐。
遊戲規則是孩子們圍成乙個圈,並一次盡可能快的傳乙個土豆,大家停止傳遞時,手裡有土豆的孩子被淘汰。重複過程,直到只剩乙個孩子。
我們可以用佇列來進行簡單的模擬乙個環。假設手裡有土豆的孩子位於佇列的頭部,在模擬傳土豆時,程式將這個孩子的名字移除佇列並加入到佇列尾部。以此迴圈。到了停下的時候,佇列頭部的孩子被淘汰。
#傳土豆
defhotpotato
(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(
)hotpotato(
['tom'
,'leo'
,'sam'
,'susan'
,'jane'
,'kent'],
input
('請輸入乙個數字:'
))
此時的輸入是我們定的傳的次數。
力扣.最近的請求次數
Python之資料型別講解
number 數字 包括int,long,float,double,complex string 字串 例如 hello,hello hello list 列表 例如 1,2,3 1,2,3,1,2,3 4 dictionary 字典 例如 tuple 元組 例如 1,2,3,abc file 檔案...
python的資料型別
python變數沒有型別,但是python有資料型別 520 和520 是不一樣的,乙個是字串,乙個是數字 python資料型別包括很多,例如數值型別包括 e記法,表示科學計數法,屬於浮點型數值 6 100 000 000 6.1 1 000 000 000 6.1e9 布林型 ture和false...
python的資料型別
str pythonzifuchuan 字串是有索引值的,從左到右索引預設0開始的,最大範圍是字串長度少1,從右到左索引預設 1開始的,最大範圍是字串開頭 print str 輸出完整字串 print str 0 輸出字串中的第乙個字元 print str 2 5 輸出字串中第三個至第五個之間的字串...