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()函式將引發異常。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP