Python中的佇列是什麼?舉例說明


佇列是一種線性資料結構,它遵循**先進先出** (FIFO) 機制。

先進入佇列的元素將首先被處理。

示例

可以透過公交車站的佇列來理解佇列資料結構。先到達公交車站的人是佇列中的第一個人,其他人則在他到達後依次排隊。當公交車到達時,先到達公交車站的人將是第一個上車的人,其餘的人將按照到達公交車站的順序上車。因此,遵循**先進先出**機制。

Python中佇列的實現

Python中的佇列可以透過多種方式實現,可以使用其他線性資料結構或Python庫中的內建模組。

方法1 - 使用列表實現

Python中的佇列可以使用列表實現。這種方法效率不高,因為在列表開頭插入或刪除元素需要O(n)時間,這比其他方法慢。

涉及的操作

append() - 此函式在佇列末尾新增一個元素。

pop(0) - 此函式刪除並返回佇列中的第一個元素。

示例

 即時演示

queue=[]
queue.append(1)
queue.append(2)
queue.append(3)
print("Initial queue",queue)
print("Element popped from the queue")
print(queue.pop(0))
print(queue.pop(0))
print("Queue after popping some elements",queue)

輸出

Initial queue [1, 2, 3]
Element popped from the queue
1
2
Queue after popping some elements [3]

佇列為空後,無法再刪除更多元素。這樣做會導致異常。

queue.pop(0)
IndexError: pop from empty list

方法2 - 使用queue.Queue實現

這是使用Python內建模組實現佇列的方法。我們需要從queue匯入Queue。我們可以用特定大小初始化佇列。大小為零表示無限佇列。

涉及的操作

maxsize - 佇列中允許的最大元素數

get() - 刪除並返回佇列中的第一個元素。如果佇列為空,則等待直到佇列至少有一個元素。

get_nowait() - 刪除並返回佇列中的第一個元素。如果佇列為空,則引發異常。

put(item) - 在佇列末尾新增一個元素。如果佇列已滿,則等待直到有空位可用。

put_nowait(item) - 在佇列末尾新增一個元素。如果佇列已滿,則引發異常。

full() - 如果佇列已滿,則返回True,否則返回False。

empty() - 如果佇列為空,則返回True,否則返回False

qsize() - 返回佇列中存在的元素數量

示例

 即時演示

from queue import Queue
q=Queue(maxsize=3)
q.put(1)
q.put(2)
q.put(3)
print("Is queue full",q.full())
print("Element popped from the queue")
print(q.get())
print(q.get())
print("Number of elements in queue",q.qsize())
print("Is queue empty",q.empty())

輸出

Is queue full True
Element popped from the queue
1
2
Number of elements in queue 1
Is queue empty False

方法3 - 使用collections.deque實現

這是在Python中實現佇列的另一種方法。我們需要從collections模組匯入deque。

涉及的操作

append() - 此函式在佇列末尾新增一個元素。

popleft() - 此函式以O(1)的時間複雜度刪除並返回佇列中的第一個元素。

示例

 即時演示

from collections import deque
queue=deque()
queue.append(1)
queue.append(2)
queue.append(3)
print("Intial queue: ",queue)
print("Element popped from the queue")
print(queue.popleft())
print(queue.popleft())
print("Queue after popping some elements: ",queue)

輸出

Intial queue: deque([1, 2, 3])
Element popped from the queue
1
2
Queue after popping some elements: deque([3])

在空deque上使用popleft()函式將引發異常。

更新於:2021年3月11日

324 次瀏覽

開啟你的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.