Pyhon数据结构——栈(stack)

版权声明:转载请注明出处 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

猜你喜欢

转载自blog.csdn.net/Rex_WUST/article/details/83268953