1. 程式人生 > >python數據結構與算法(11)

python數據結構與算法(11)

允許 鏈表 __init__ sel 出隊 add 這也 ext shadow

隊列
隊列(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()

python數據結構與算法(11)