python隊列只能一個個讀取嗎,python與隊列入門

 2023-12-06 阅读 33 评论 0

摘要:隊列是有序集合,添加操作發生在“尾部”,移除操作則發生在“頭部”。新元素從尾部進入隊列,然后一直向前移動到頭部,直到成為下一個被移除的元素。最新添加的元素必須在隊列的尾部等待,在隊列中時間最長的元素則排在最前面。這種排序原則被
  • 隊列是有序集合,添加操作發生在“尾部”,移除操作則發生在“頭部”。
  • 新元素從尾部進入隊列,然后一直向前移動到頭部,直到成為下一個被移除的元素。
  • 最新添加的元素必須在隊列的尾部等待,在隊列中時間最長的元素則排在最前面。這種排序原則被稱作FIFO(first-in first-out),即先進先出,也稱先到先得。

在日常生活中,我們經常排隊,這便是最簡單的隊列例子。進電影院要排隊,在超市結賬要排隊,買咖啡也要排隊(等著從盤子棧中取盤子)。好的隊列只允許一頭進,另一頭出,不可能發生插隊或者中途離開的情況

圖3-12展示了一個由Python數據對象組成的簡單隊列。
在這里插入圖片描述
計算機科學中也有眾多的隊列例子。我的計算機實驗室有30臺計算機,它們都與同一臺打印機相連。當學生需要打印的時候,他們的打印任務會進入一個隊列。該隊列中的第一個任務就是即將執行的打印任務。如果一個任務排在隊列的最后面,那么它必須等到前面的任務都執行完畢后才能執行。我們稍后會更深入地探討這個有趣的例子。

  • 操作系統使用一些隊列來控制計算機進程。
  • 調度機制往往基于一個隊列算法,其目標是盡可能快地執行程序,同時服務盡可能多的用戶。

在打字時,我們有時會發現字符出現的速度比擊鍵速度慢。這是由于計算機正在做其他的工作。擊鍵操作被放入一個類似于隊列的緩沖區,以便對應的字符按正確的順序顯示。

隊列抽象數據類型

隊列抽象數據類型由下面的結構和操作定義。如前所述,隊列是元素的有序集合,添加操作發生在其尾部,移除操作則發生在頭部。

python隊列只能一個個讀取嗎,隊列的操作順序是FIFO,它支持以下操作。

? Queue()創建一個空隊列。它不需要參數,且會返回一個空隊列。
? enqueue(item)在隊列的尾部添加一個元素。它需要一個元素作為參數,不返回任何值。
? dequeue()從隊列的頭部移除一個元素。它不需要參數,且會返回一個元素,并修改隊列的內容。
? isEmpty()檢查隊列是否為空。它不需要參數,且會返回一個布爾值。
? size()返回隊列中元素的數目。它不需要參數,且會返回一個整數。

假設q是一個新創建的空隊列。
表3-5展示了對q進行一系列操作的結果。在“隊列內容”一列中,隊列的頭部位于右端。4是第一個被添加到隊列中的元素,因此它也是第一個被移除的元素。
在這里插入圖片描述

用Python實現隊列

創建一個新類來實現隊列抽象數據類型是十分合理的。像之前一樣,我們利用簡潔強大的列表來實現隊列。需要確定列表的哪一端是隊列的尾部,哪一端是頭部。

代碼清單3-9中的實現假設隊列的尾部在列表的位置0處。如此一來,便可以使用insert函數向隊列的尾部添加新元素。pop則可用于移除隊列頭部的元素(列表中的最后一個元素)。這意味著添加操作的時間復雜度是O(n ),移除操作則是O(1)。

class Queue:def __init__(self):self.items=[]def isEmpty(self):return self.items==[]def equeue(self,item):self.items.insert(0,item)def dequeue(self):return self.items.pop()def size(self):return len(self.items)
q=Queue()
print(q.isEmpty()) #True
q.equeue('dog')
q.equeue(4)
print(q.items) # [4, 'dog']
q.dequeue()
print(q.items) #dog

總結

  • 隊列,先入先出
  • 利用python 列表很容易實現隊列(棧亦然)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/189304.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息