本文主要是介绍Pyhon数据结构——栈(stack),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
栈可以看成一个容器。先入栈的数据保存在容器底部,后入栈的数据保存在容器顶部。出栈的时候,后入栈的数据先出,先入栈的数据后出。因此栈有一个特性叫做后入先出(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 = sizedef push(self, element): # 元素进栈if self.isFull():raise StackException('PyStackOverflow')# 如果栈满则引发异常else:self.stack.append(element)self.top = self.top + 1def pop(self): # 元素出栈if self.isEmpty():raise StackException('PyStackUnderflow') # 如果栈为空则引发异常else:element = self.stack[-1]self.top = self.top - 1del self.stack[-1]return elementdef Top(self): # 获取栈顶位置return self.topdef empty(self): # 清空栈self.stack = []self.top = -1def isEmpty(self): # 是否为空栈if self.top == -1:return Trueelse:return Falsedef isFull(self): # 是否为满栈if self.top == self.size - 1:return Trueelse:return Falseclass StackException(Exception): #自定义异常类def __init__(self,data):self.data=datadef __str__(self):return self.dataif __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 pushraise StackException('PyStackOverflow')# 如果栈满则引发异常 StackException: PyStackOverflow
这篇关于Pyhon数据结构——栈(stack)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!