1. 程式人生 > >python資料結構與演算法(11)

python資料結構與演算法(11)

佇列
佇列(queue)是隻允許在⼀端進⾏插⼊操作,⽽在另⼀端進⾏刪除操作的 線性表。
佇列是⼀種先進先出的(First In First Out)的線性表,簡稱FIFO。允許插⼊ 的⼀端為隊尾,允許刪除的⼀端為隊頭。佇列不允許在中間部位進⾏操作! 假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,⽽an是隊尾 元素。這樣我們就可以刪除時,總是從a1開始,⽽插⼊時,總是在佇列最 後。這也⽐較符合我們通常⽣活中的習慣,排在第⼀個的優先出列,最後來 的當然排在隊伍最後。
python資料結構與演算法(11)
佇列的實現
同棧⼀樣,佇列也可以⽤順序表或者連結串列實現。
操作
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),是⼀種具有佇列和棧的性 質的資料結構。
雙端佇列中的元素可以從兩端彈出,其限定插⼊和刪除操作在表的兩端進 ⾏。雙端佇列可以在佇列任意⼀端⼊隊和出隊。
python資料結構與演算法(11)

操作
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()