1. 程式人生 > >python 佇列與棧的實現

python 佇列與棧的實現

1、Python資料結構——佇列

佇列是一種列表,不同的是佇列只能在隊尾插入元素,在隊首刪除元素。

佇列是一種先進先出(First-In-First-Out,FIFO)的資料結構。佇列被用在很多地方,比如提交作業系統執行的一系列程序、列印任務池等,一些模擬系統用佇列來模擬銀行或雜貨店裡排隊的顧客。

queue的常用操作:

Queue()        定義一個空佇列,無引數,返回值是空佇列。
enqueue(item)  在佇列尾部加入一個數據項,引數是資料項,無返回值。
dequeue()      刪除佇列頭部的資料項,不需要引數,返回值是被刪除的資料,佇列本身有變化。
isEmpty()      檢測佇列是否為空。無引數,返回布林值。
clear()        清空佇列,無參無返回值
size()         返回佇列資料項的數量。無引數,返回一個整。

具體實現如下:

class Queue(object):
    #定義一個空佇列
    def __init__(self):
        self.items = []
    #佇列(只能在隊尾)新增一個元素
    def enqueue(self, item):
        self.items.append(item)
    #刪除佇列(只能在對頭)一個元素
    def dequeue(self):
        self.items.pop(0)
    #判斷佇列是否為空
    def isEmpty(self):
        return(self.items == [])
    #清空佇列
    def clear(self):
        del(self.items) #該佇列就不存在了,而不是清空元素
    #返回佇列項的數量
    def size(self):
        return(len(self.items))
    #列印佇列
    def print(self):
        print(self.items)
if __name__ == '__main__':
    q = Queue()
    print(q.isEmpty())
    for i in range(5):
        q.enqueue(i)
    print(q.size())
    q.print()
    q.dequeue()
    q.print()
    q.clear()
    print(q)

2、Python資料結構——棧

棧是一種特殊的列表,棧內的元素只能通過列表的一端訪問,這一端稱為棧頂。咖啡廳內的一摞盤子是現實世界中常見的棧的例子。只能從最上面取盤子,盤子洗淨後,也只能摞在這一摞盤子的最上面。

棧被稱為一種後入先出(LIFO,last-in-first-out)的資料結構。由於棧具有後入先出的特點,所以任何不在棧頂的元素都無法訪問。為了得到棧底的元素,必須先拿掉上面的元素。

stack的常用操作:

Stack()    建立一個空的棧物件。
push(item) 把一個元素新增到棧的最頂層。
pop()      刪除棧最頂層的元素,並返回這個元素。
peek()     返回最頂層的元素,並不刪除它。
clear()    清空棧。
isEmpty()  判斷棧是否為空。
size()     返回棧中元素的個數。

具體實現如下:

class Stack(object):
    #定義一個空棧
    def __init__(self):
        self.items = []
    #新增一個元素
    def push(self, item):
        self.items.append(item)
    #刪除一個元素
    def pop(self):
        return(self.items.pop())
    #返回棧頂
    def peek(self):
        return(self.items[-1])
    #清空棧
    def clear(self):
        del(self.items)
    #判斷是否為空
    def isEmpty(self):
        return(self.items == [])
    #返回棧中元素個數
    def size(self):
        return(len(self.items))
    #列印棧
    def print(self):
        print(self.items)
if __name__ == '__main__':
    s = Stack()
    print(s.isEmpty())
    for i in range(5):
        s.push(i)
    s.print()
    s.pop()
    s.print()
    print(s.size())
    print(s.peek())
    s.clear()