Python數(shù)據(jù)結構與算法中的隊列詳解(1)
什么是隊列?
隊列,與棧類似,是有序集合。添加操作發(fā)生在 “尾部”,移除操作只發(fā)生在 “頭部”。新元素只從尾部進入隊列,然后一直向前移動到頭部,直到成為下一個被移除的元素。?
最新添加的元素必須在隊列的尾部等待,在隊列中時間最長的元素則排在最前面。這種排序原則被稱作FIFO(first-in first-out),即先進先出,也稱先到先得。在日常生活中,我們經(jīng)常排隊,這便是最簡單的隊列例子。進電影院要排隊,在超市結賬要排隊,買咖啡也要排隊。好的隊列只允許一頭進,另一頭出,不可能發(fā)生插隊或者中途離開的情況。?
構建一個隊列
如前所述,隊列是元素的有序集合,添加操作發(fā)生在其尾部,移除操作則發(fā)生在頭部。隊列的操作順序是 FIFO,它支持以下操作。
- 創(chuàng)建一個空隊列。它不需要參數(shù),且會返回一個空隊列。
Queue()
- 在隊列的尾部添加一個元素。 它需要一個元素作為參數(shù),不返回任何值。
enqueue(item)
- 從隊列的頭部移除一個元素。它不需要參數(shù),且會返回一個元素,并修改隊列的內(nèi)容。
dequeue()
- 檢查隊列是否為空。它不需要參數(shù), 且會返回一個布爾值。
isEmpty()
- 返回隊列中元素的數(shù)目。它不需要參數(shù),且會返回一個整數(shù)。
size()?
與構建棧一樣,我們利用簡潔強大的列表來實現(xiàn)隊列。?
需要確定列表的哪一端是隊列的尾部,哪一端是頭部。 我們假設隊列的尾部在列表的位置0處。 如此一來,便可以使用 insert 函數(shù)向隊列的尾部添加新元素。pop 則可用于移除隊列頭部的元素(列表中的最后一個元素)。這意味著添加操作的時間復雜度是O(n),移除操作則是O(1)。?
隊列實現(xiàn)代碼如下:
class Queue: def __init__(self): self.items = [] # 構建空隊列 print("你創(chuàng)建了一個隊列") def isEmpty(self): return self.items ==[] # 判斷是否為空 def enqueue(self,item): self.items.insert(0, item) # 在隊列尾部(列表左端)插入元素 print("你在隊列尾部插入了一個%s" % item) def dequeue(self): print("你在隊列頭部移除了一個元素") return self.items.pop() # 在隊列頭部(列表右端)移出元素 def size(self): return len(self.items) # 隊列(列表)長度 def look(self): print(self.items)
下圖展示了隊列的操作及其返回結果:
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
Pytorch mask_select 函數(shù)的用法詳解
今天小編就為大家分享一篇Pytorch mask_select 函數(shù)的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python如何將多個模型的ROC曲線繪制在一張圖(含圖例)
這篇文章主要給大家介紹了關于python如何將多個模型的ROC曲線繪制在一張圖的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-02-02python實現(xiàn)獲取aws route53域名信息的方法
最近由于工作原因接觸到aws的服務,我需要實時獲取所有的域名信息,用于對其進行掃描,因此寫了一個自動化爬取腳本 給需要的人分享,對python獲取aws route53域名信息相關知識感興趣的朋友一起看看吧2023-12-12對python中Matplotlib的坐標軸的坐標區(qū)間的設定實例講解
今天小編就為大家分享一篇對python中Matplotlib的坐標軸的坐標區(qū)間的設定實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python采集貓眼兩萬條數(shù)據(jù) 對《無名之輩》影評進行分析
這篇文章主要給大家介紹了關于利用Python榮國采集兩萬條貓眼數(shù)據(jù),對《無名之輩》影評進行分析的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-12-12