Python 採用列表實現棧(Stack)
阿新 • • 發佈:2019-01-31
前言
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中也可以以類似的方式實現。
但是這樣所有其他的列表操作也都可以操作這個棧。這包括在任意位置插入、替換和刪除元素。這些額外的操作違反了棧作為一種抽象資料型別的本意。