栈
栈的一个特性:先进后出(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) # 引发异常
题外记
栈的思想很简单,操作相对来说也比较简单,主要栈顶位置的时刻变化!