python資料結構與演算法(11)
阿新 • • 發佈:2018-11-29
佇列
佇列(queue)是隻允許在⼀端進⾏插⼊操作,⽽在另⼀端進⾏刪除操作的 線性表。
佇列是⼀種先進先出的(First In First Out)的線性表,簡稱FIFO。允許插⼊ 的⼀端為隊尾,允許刪除的⼀端為隊頭。佇列不允許在中間部位進⾏操作! 假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,⽽an是隊尾 元素。這樣我們就可以刪除時,總是從a1開始,⽽插⼊時,總是在佇列最 後。這也⽐較符合我們通常⽣活中的習慣,排在第⼀個的優先出列,最後來 的當然排在隊伍最後。
佇列的實現
同棧⼀樣,佇列也可以⽤順序表或者連結串列實現。
操作
Queue() 建立⼀個空的佇列 enqueue(item) 往佇列中新增⼀個item元素 dequeue() 從佇列頭部刪除⼀個元素 is_empty() 判斷⼀個佇列是否為空 size() 返回佇列的⼤⼩
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()[/size][/font]
[font=微軟雅黑][size=3]
雙端佇列
雙端佇列(deque,全名double-ended queue),是⼀種具有佇列和棧的性 質的資料結構。
雙端佇列中的元素可以從兩端彈出,其限定插⼊和刪除操作在表的兩端進 ⾏。雙端佇列可以在佇列任意⼀端⼊隊和出隊。
操作
Deque() 建立⼀個空的雙端佇列 add_front(item) 從隊頭加⼊⼀個item元素 add_rear(item) 從隊尾加⼊⼀個item元素 remove_front() 從隊頭刪除⼀個item元素 remove_rear() 從隊尾刪除⼀個item元素 is_empty() 判斷雙端佇列是否為空 size() 返回佇列的⼤⼩
實現
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): """在隊尾新增元素""" self.items.append(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()