1. 程式人生 > >Python 採用列表實現棧(Stack)

Python 採用列表實現棧(Stack)

前言

Python本身已有順序表(List、Tupple)的實現,所以這裡從棧開始。

什麼是棧

想象一摞被堆起來的書,這就是棧。這堆書的特點是,最後被堆進去的書,永遠在最上面。從這堆書裡面取一本書出來,取哪本書最方便?肯定是最上面那本。棧這種資料結構的特點就是如此:後進先出(Last In First Out - LIFO),即最後被堆進去的資料,最先被拿出來。

棧的Python實現

棧可以用順序表方式實現,也可以用連結串列方式實現。我大Python的內建資料結構太強大,可以用list直接實現棧,簡單快捷。人生苦短,我用Python。程式碼如下:

列表實現的棧類
class Stack(object):
    # 初始化棧為空列表
    def __init__(self):
        self.items = []

    # 判斷棧是否為空,返回布林值
    def is_empty(self):
        return self.items == []

    # 返回棧頂元素
    def peek(self):
        return self.items[len(self.items) - 1]

    # 返回棧的大小
    def size(self):
        return len(self.items)

    # 壓棧,入棧,進棧
    def push(self, item):
        self.items.append(item)

    # 出棧
    def pop(self):
        return self.items.pop()
測試程式
if __name__ == '__main__':
    # 初始化一個棧物件
    my_stack = Stack()
    my_stack.push('h')
    my_stack.push('a')
    # 看一下棧的大小(有幾個元素
    print(my_stack.size())
    # 列印棧頂元素
    print(my_stack.peek())
    print(my_stack.pop())
    print(my_stack.peek())
    print(my_stack.size())
    print(my_stack.pop())
    print(my_stack.size())
    print(my_stack.is_empty())
測試結果
2
a
a
h
1
h
0
True

問題

這裡實現棧,就是把list包裝成一個類,再新增一些方法作為棧的基本操作。其他的資料結構在Python中也可以以類似的方式實現。 
但是這樣所有其他的列表操作也都可以操作這個棧。這包括在任意位置插入、替換和刪除元素。這些額外的操作違反了棧作為一種抽象資料型別的本意。