棧
棧的一個特性:先進後出(First In Last Out, FILO)。python中,可以使用列表來存儲棧的數據。通過創建一個棧類,便可以方便的對棧進行操作。主要有:
- 進棧(push())
- 出棧(pop())
- 清空棧(empty())
- 是否空棧(isEmpty())
- 是否滿棧(isFull())
- 設置棧大小(setSize())
- 獲取棧頂位置(getTop())等
python實現代碼示例
# -*- coding: utf-8 -*-
"""
Created on Mon Apr 1 13:36:22 2019
@author: mu
"""
class PyStack: # 棧類
def __init__(self,size = 20):
self.stack = [] # 棧列表
self.size = size # 棧大小
self.top = -1 # 棧頂位置
# 設置棧大小
def setSize(self,size):
self.size = size
# 元素進棧
def push(self,element):
if self.isFull(): # 如果棧滿,引發異常
raise StackException('PyStackOverflow')
else:
self.stack.append(element)
self.top +=1
# 元素出棧
def pop(self):
if self.isEmpty(): # 如果棧爲空,則引發異常
raise StackException('PyStackOverflow')
else:
element = self.stack[-1]
self.top -=1
del self.stack[-1]
# self.stack = self.stack[:-1]
return element
# 獲取棧頂位置
def getTop(self):
return self.top
# 清空棧
def empty(self):
self.stack = []
self.top = -1
# 判斷是否爲空棧
def isEmpty(self):
if self.top ==-1:
return True
else:
return False
# 是否爲滿棧
def isFull(self):
if self.top == self.size-1:
return True
else:
return False
class StackException(Exception): # 自定義異常類
def __init__(self,data):
self.data = data
def __str__(self):
return self.data
'''
主函數
'''
if __name__ == '__main__':
stack = PyStack() # 創建棧
for i in range(10):
stack.push(i) # 元素進棧
print('棧頂位置:',stack.getTop())
while not stack.isEmpty():
print(stack.pop()) # 元素出棧
stack.empty() #清空棧
for i in range(21):
stack.push(i) # 引發異常
題外記
棧的思想很簡單,操作相對來說也比較簡單,主要棧頂位置的時刻變化!