1. 程式人生 > >Python實現的棧(Stack)

Python實現的棧(Stack)

棧是一種只能在一端進行插入和刪除操作的資料結構。

前言

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

什麼是棧

想象在桌子上放一摞書,這就是棧。這堆書的特點就是,最後被堆進去的,永遠在最上面。從這堆書中取出一本書,哪本最方便?還是最上面的那本。棧這種資料結構就是如此:後進先出(Lask In First Out),即最後被堆進去的資料,最先被拿出來。

棧的實現

棧可以用順序表方式實現,也可以用連結串列方式實現。我大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)-]
    # 返回棧的發小
    def size(self):
        return len(self.items)
    # 把新的元素壓入棧
    def push(self,item):
        self.items.append(item)
    # 把棧頂元素丟出去(出棧)
    def pop(self,item):
        return self.items.pop()    

例項化一個棧物件

if __name__=='__mian__':
	# 初始化一個棧物件
	my_stack = Stack()
	# 把'h'入棧
	my_stack.push('h')
	# 把'a'入棧
	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())

提示

看完上面的程式碼,聰明的同學一定知道,Python裡面實現棧,就是把list包裝成一個類,再新增一些方法作為棧的基本操作。其他的資料結構在Python中也是以類似的方式實現的。