版权声明:转载请注明出处 https://blog.csdn.net/Rex_WUST/article/details/83268953
栈可以看成一个容器。先入栈的数据保存在容器底部,后入栈的数据保存在容器顶部。出栈的时候,后入栈的数据先出,先入栈的数据后出。因此栈有一个特性叫做后入先出(last in first out,LIFO)。
在pystack.py脚本中,利用列表,创建了一个简单的栈结构。代码如下:
# -*- coding:utf-8 -*-
# file: pystack.py
#
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 = self.top + 1
def pop(self): # 元素出栈
if self.isEmpty():
raise StackException('PyStackUnderflow') # 如果栈为空则引发异常
else:
element = self.stack[-1]
self.top = self.top - 1
del self.stack[-1]
return element
def Top(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.Top()) # 输出栈顶位置
for i in range(10):
print(stack.pop()) # 元素出栈
stack.empty() # 清空栈
for i in range(21):
stack.push(i) # 此处将引发异常
运行结果如下:
Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. >>> == RESTART: G:\中南硕士生涯\(全部)Python学习\《python数据分析从入门到精通》张啸宇\源代码\第5章\pystack.py == 9 9 8 7 6 5 4 3 2 1 0 Traceback (most recent call last): File "G:\pystack.py", line 56, in <module> stack.push(i) # 此处将引发异常 File "G:\pystack.py", line 13, in push raise StackException('PyStackOverflow')# 如果栈满则引发异常 StackException: PyStackOverflow