Pyhon数据结构——栈(stack)

本文介绍了一种使用Python列表创建的栈数据结构。栈遵循后入先出(LIFO)原则,文章详细解释了栈的基本操作,如元素的入栈、出栈、检查栈是否为空或已满,并提供了一个完整的Python脚本示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈可以看成一个容器。先入栈的数据保存在容器底部,后入栈的数据保存在容器顶部。出栈的时候,后入栈的数据先出,先入栈的数据后出。因此栈有一个特性叫做后入先出(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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值