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