[快学Python3]数据结构-堆栈
时间:2022-05-07
本文章向大家介绍[快学Python3]数据结构-堆栈,主要内容包括算法原理、算法实现、小结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
概述
什么是堆栈,简单而言:后进先出。
算法原理
- 进栈(PUSH)算法
- 若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作2)
- 置TOP=TOP+1(栈指针加1,指向进栈地址)
- S(TOP)=X,结束(X为新进栈的元素)
- 退栈(POP)算法
- 若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作2)
- X=S(TOP),(退栈后的元素赋给X)
- TOP=TOP-1,结束(栈指针减1,指向栈顶)
算法实现
# -*- coding:utf-8 -*-
__author__ = '苦叶子'
class Stack:
def __init__(self, size=30):
# 初始化堆栈大小
self.size = size
# 初始化堆栈列表
self.stack = []
# 初始化堆栈默认top值
self.top = -1
# 设置堆栈大小
def set_size(self, size):
self.size = size
# 判断堆栈是否为空
def is_empty(self):
res = False
if self.top == -1:
res = True
return res
# 判断堆栈是否满了
def is_full(self):
res = False
if self.top + 1 == self.size:
res = True
return res
# 打印堆栈里所有内容
def show(self):
print(self.stack) # 入栈
def push(self, obj):
if self.is_full():
raise Exception("堆栈满啦……")
else:
self.stack.append(obj)
self.top += 1
# 出栈
def pop(self):
if self.is_empty():
raise Exception("堆栈是空的……")
else:
self.top -= 1
return self.stack.pop()
if __name__ == "__main__":
print("堆栈实现示例")
# 初始一个长度为5的堆栈实例
stack = Stack(5)
# 入栈 整数1-5
for index in range(1, 6):
stack.push(index)
# 打印下堆栈的内容
stack.show()
# 出栈, data的值应该为5
data = stack.pop()
print(data)
# 打印下堆栈的内容,此时应该是[1,2,3,4]
stack.show()
小结
在本示例中我们使用了python list的特性,实现了堆栈的算法原理,大家可以尝试进一步完善。
- Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解
- Android查缺补漏(View篇)--自定义 View 的基本流程
- CVPR2018: Unsupervised Cross-dataset Person Re-identification by Transfer Learning of Spatio-tempora
- 一个数据包消灭一台服务器的DNS漏洞
- java文件基本操作与实例
- 如何在Azkaban中安装HDFS插件以及与CDH集成
- CVE-2017-5123 漏洞利用全攻略
- sqlmap被ban了ip怎么办
- 毫秒级检测!你见过带GPU的树莓派吗?
- 达观数据对AngularJS技术的思考与实践
- hadoop配置文件
- 推荐一款src自动化扫描和收集的工具
- 蓝桥杯:兰顿蚂蚁
- 蓝桥杯:矩阵翻硬币
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【python实现卷积神经网络】卷积层Conv2D实现(带stride、padding)
- reduce学习笔记
- 【python实现卷积神经网络】开始训练
- django实战(五)--增加数据
- 实战django(一)--(你也能看懂的)注册与登录(带前端模板)
- 【python-leetcode23-多路归并】合并k个排序链表
- 实战django(二)--登录实现记住我
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.gong.mybatis.da
- 【python-leetcode378-二分查找】有序矩阵中的第k小元素
- 使用cookie来记录用户登录次数,为何次数不更新
- (二)golang--windows下vscode的安装以及go环境的配置
- mybatis文件映射之使用#取值时的一些规则
- 【论文笔记】Improved Residual Networks for Image and Video Recognition(ResNet新变体:IResNet)
- SQL语句在MYSQL中的运行过程和各个组件的介绍
- (五)golang--常用的一些玩意