佇列是一種列表,不同的是佇列只能在隊尾插入元素,在隊首刪除元素。佇列用於儲存按順序排列的資料,先進先出,這點和棧不一樣,在棧中,最後入棧的元素反而被優先處理。可以將佇列想象成在銀行前排隊的人群,排在最前面的人第一個辦理業務,新來的人只能在後面排隊,直到輪到他們為止。
佇列是一種先進先出(First-In-First-Out,FIFO)的資料結構。佇列被用在很多地方,比如提交作業系統執行的一系列程式、列印任務池等,一些模擬系統用佇列來模擬銀行或雜貨店裡排隊的顧客。
佇列的兩種主要操作是:向佇列中插入新元素和刪除佇列中的元素。插入操作也叫做入隊,刪除操作也叫做出隊。入隊操作在隊尾插入新元素,出隊操作刪除隊頭的元素。
佇列的另外一項重要操作是讀取隊頭的元素。這個操作叫做peek()。該操作返回隊頭元素,但不把它從佇列中刪除。除了讀取隊頭元素,我們還想知道佇列中儲存了多少元素,可以使用size()滿足該需求。
queue通常的操作:
1 2 3 4 5 |
Queue() 定義一個空佇列,無引數,返回值是空佇列。 enqueue(item) 在佇列尾部加入一個資料項,引數是資料項,無返回值。 dequeue() 刪除佇列頭部的資料項,不需要引數,返回值是被刪除的資料,佇列本身有變化。 isEmpty() 檢測佇列是否為空。無引數,返回布林值。 size() 返回佇列資料項的數量。無引數,返回一個整數。 |
佇列操作舉例:
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 類模擬:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Queue: """模擬佇列""" 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) |
以下是測試程式碼:
1 2 3 4 5 6 7 8 9 10 11 |
q=Queue() q.isEmpty() q.enqueue('dog') q.enqueue(4) q=Queue() q.isEmpty() q.enqueue(4) q.enqueue('dog') q.enqueue(True) |