摘要:隊列是一種先進(jìn)先出,的數(shù)據(jù)結(jié)構(gòu)。隊列的另外一項重要操作是讀取隊頭的元素。通常的操作定義一個空隊列,無參數(shù),返回值是空隊列。刪除隊列頭部的數(shù)據(jù)項,不需要參數(shù),返回值是被刪除的數(shù)據(jù),隊列本身有變化。
隊列是一種列表,不同的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列用于存儲按順序排列的數(shù)據(jù),先進(jìn)先出,這點(diǎn)和棧不一樣,在棧中,最后入棧的元素反而被優(yōu)先處理。可以將隊列想象成在銀行前排隊的人群,排在最前面的人第一個辦理業(yè)務(wù),新來的人只能在后面排隊,直到輪到他們?yōu)橹埂?/p>
隊列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊列來模擬銀行或雜貨店里排隊的顧客。
隊列的兩種主要操作是:向隊列中插入新元素和刪除隊列中的元素。插入操作也叫做入隊,刪除操作也叫做出隊。入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。
隊列的另外一項重要操作是讀取隊頭的元素。這個操作叫做peek()。該操作返回隊頭元素,但不把它從隊列中刪除。除了讀取隊頭元素,我們還想知道隊列中存儲了多少元素,可以使用size()滿足該需求。
queue通常的操作:
Queue() 定義一個空隊列,無參數(shù),返回值是空隊列。 enqueue(item) 在隊列尾部加入一個數(shù)據(jù)項,參數(shù)是數(shù)據(jù)項,無返回值。 dequeue() 刪除隊列頭部的數(shù)據(jù)項,不需要參數(shù),返回值是被刪除的數(shù)據(jù),隊列本身有變化。 isEmpty() 檢測隊列是否為空。無參數(shù),返回布爾值。 size() 返回隊列數(shù)據(jù)項的數(shù)量。無參數(shù),返回一個整數(shù)。
隊列操作舉例:
Queue Operation | Queue Contents | Return Value |
---|---|---|
q.isEmpty() | [] | True |
q.enqueue(4) | [4] | |
q.enqueue("dog") | ["dog",4] | |
q.enqueue(True) | [True,"dog",4] | |
q.size() | [True,"dog",4] | 3 |
q.isEmpty() | [True,"dog",4] | False |
q.enqueue(8.4) | [8.4,True,"dog",4] | |
q.dequeue() | [8.4,True,"dog"] | 4 |
q.dequeue() | [8.4,True] | "dog" |
q.size() | [8.4,True] | 2 |
Queue 類模擬:
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)
以下是測試代碼:
q=Queue() q.isEmpty() q.enqueue("dog") q.enqueue(4) q=Queue() q.isEmpty() q.enqueue(4) q.enqueue("dog") q.enqueue(True)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/44177.html
摘要:默認(rèn)值為,指定為時代表可以阻塞,若同時指定,在超時時返回。當(dāng)消費(fèi)者線程調(diào)用意味著有消費(fèi)者取得任務(wù)并完成任務(wù),未完成的任務(wù)數(shù)就會減少。當(dāng)未完成的任務(wù)數(shù)降到,解除阻塞。 學(xué)習(xí)契機(jī) 最近的一個項目中在使用grpc時遇到一個問題,由于client端可多達(dá)200,每個端口每10s向grpc server發(fā)送一次請求,server端接受client的請求后根據(jù)request信息更新數(shù)據(jù)庫,再將數(shù)據(jù)...
摘要:每當(dāng)我們收到一條消息,這個回調(diào)函數(shù)就被皮卡庫調(diào)用。接下來,我們需要告訴這個特定的回調(diào)函數(shù)應(yīng)該從我們的隊列接收消息為了讓這個命令成功,我們必須確保我們想要訂閱的隊列存在。生產(chǎn)者計劃將在每次運(yùn)行后停止歡呼我們能夠通過發(fā)送我們的第一條消息。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 介紹 RabbitMQ是一個消息代理:它接受和轉(zhuǎn)發(fā)消息。你...
摘要:在隊尾添加入一個元素,參數(shù)是數(shù)據(jù)項,無返回值。刪除隊首的元素,不需要參數(shù),返回值是被刪除的元素,隊列本身有變化。列表用于隨機(jī)訪問和定長數(shù)據(jù)的操作,包括切片,而雙端隊列適用于在兩端壓入或彈出元素,索引但不包括切片的效率可能低于列表。 雙端隊列(Deque),是一種類似于隊列的元素的有序集合。它擁有兩端,隊首和隊尾,并且元素保持在當(dāng)前的位置。雙端隊列的一個不同點(diǎn)就是,添加和刪除元素的位置不...
摘要:線性結(jié)構(gòu)隊列與棧棧棧是一種遵循先進(jìn)后出原則的有序列表,新添加或待刪除的元素都保存在棧的一端,這一端被稱作為棧頂,另一端被稱作為棧底。將字符串的每個字符按順序亞入棧。 線性結(jié)構(gòu) 隊列與棧 棧 棧(Stack)是一種遵循先進(jìn)后出(LIFO)原則的有序列表,新添加或待刪除的元素都保存在棧的一端,這一端被稱作為棧頂,另一端被稱作為棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。 棧的操作 ...
摘要:線性結(jié)構(gòu)隊列與棧棧棧是一種遵循先進(jìn)后出原則的有序列表,新添加或待刪除的元素都保存在棧的一端,這一端被稱作為棧頂,另一端被稱作為棧底。將字符串的每個字符按順序亞入棧。 線性結(jié)構(gòu) 隊列與棧 棧 棧(Stack)是一種遵循先進(jìn)后出(LIFO)原則的有序列表,新添加或待刪除的元素都保存在棧的一端,這一端被稱作為棧頂,另一端被稱作為棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。 棧的操作 ...
閱讀 2385·2021-11-24 10:33
閱讀 1451·2019-08-30 15:43
閱讀 3339·2019-08-29 17:24
閱讀 3552·2019-08-29 14:21
閱讀 2284·2019-08-29 13:59
閱讀 1791·2019-08-29 11:12
閱讀 2894·2019-08-28 18:00
閱讀 1927·2019-08-26 12:17