佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
佇列是一種先進先出的(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端為隊頭。佇列不允許在中間部位進行操作!假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,而an是隊尾元素。這樣我們就可以刪除時,總是從a1開始,而插入時,總是在佇列最後。這也比較符合我們通常生活中的習慣,排在第乙個的優先出列,最後來的當然排在隊伍最後。
佇列的實現
同棧一樣,佇列也可以用順序表或者鍊錶實現。
佇列操作有:
-queue() 建立乙個空的佇列
class queue(object):
"""佇列"""
def __init__(self):
self.items =
def is_empty(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)
if __name__ == "__main__":
q = queue()
q.enqueue("hello")
q.enqueue("world")
q.enqueue("itcast")
print q.size()
print q.dequeue()
print q.dequeue()
print q.dequeue()
還有一種個對壘叫雙端佇列
端佇列(deque,全名double-ended queue),是一種具有佇列和棧的性質的資料結構。
雙端佇列中的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。雙端佇列可以在佇列任意一端入隊和出隊。
用程式來實現:
class deque(object):
"""雙端佇列"""
def __init__(self):
self.items =
def is_empty(self):
"""判斷佇列是否為空"""
return self.items ==
def add_front(self, item):
"""在隊頭新增元素"""
self.items.insert(0,item)
def add_rear(self, item):
"""在隊尾新增元素"""
def remove_front(self):
"""從隊頭刪除元素"""
return self.items.pop(0)
def remove_rear(self):
"""從隊尾刪除元素"""
return self.items.pop()
def size(self):
"""返回佇列大小"""
return len(self.items)
if __name__ == "__main__":
deque = deque()
deque.add_front(1)
deque.add_front(2)
deque.add_rear(3)
deque.add_rear(4)
print deque.size()
print deque.remove_front()
print deque.remove_front()
print deque.remove_rear()
print deque.remove_rear()
Python 資料結構 佇列
queue 佇列是一種先進先出 fifo 的資料型別,新的元素通過 入隊 的方式新增進 queue 的末尾,出隊 就是從 queue 的頭部刪除元素.用列表來做 queue queue 初始化乙個列表資料型別物件,作為乙個佇列 defenq 定義乙個入棧方法 提示輸入乙個入隊的 string 物件,...
資料結構 python 佇列
佇列 queue 是一種特殊的線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 rear 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列符合先進先出 fifo 的原則。複雜度分析 佇列屬於常見的一種線性結構...
Python資料結構 佇列
佇列也是一系列有順序的元素的集合,新元素的加入在佇列的一端,叫做 隊尾 rear 已有元素的移除發生在佇列的另一端,叫做 隊首 front 和棧不同的是,佇列只能在隊尾插入元素,在隊首刪除元素。最新加入的元素必須處於隊尾,在佇列停留時間最長的元素處於隊首。可以把佇列想象成在銀行前排隊的人群,排在最前...