栈及其简单应用(python代码)
栈属于线性结构(Linear Struncture),要搞清楚这个概念,首先要明白”栈“原来的意思,如此才能把握本质。"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,所以引入到计算机领域里,就是指数据暂时存储的地方,所以才有进栈、出栈的说法。在众多算法中,栈作为一种数据结构,应用广泛。
一、栈的特性
栈是一种有次序的数据项集合,在栈中,数据的加入和移除都仅发生在一端,如下图。

简单来说它就是存放数据的一种容器,不过这个容器有些特别,就像一个量筒,只能一端进出(push和pop),由于这种特殊的容器结构,栈就有了一个很重要的特性,后进先出(Last in First out),想象一下,把一个个鹌鹑蛋依次放入下面的量筒里,当再次把鹌鹑蛋取出来时,只能从最上面一个开始取出。

在生活中我们也能经常碰到栈这种特性的地方,比如word文档里面的撤回,浏览器页面的返回上一页。
二、定义一个栈
我们知道了栈的特性和功能,接下来我们就来定义一个栈。
//我们定义一个Stack类
class Stack:
def __init__(self):
self.items = [] //初始化一个空的列表,存放数据,下面栈的操作会基于列表的一些方法来定义,如append,pop等 def isEmpty(self):
return self.items == [] //判断栈是否为空,返回True或者False def push(self,item):
self.items.append(item) // push操作,数据入栈,如上文中的把鹌鹑蛋放入量筒, def pop(self):
return self.items.pop() //pop 操作,出栈,把最后入栈的数据从栈内删除,列表的pop方法删除列表最后一个数据。 def peek(self):
return self.items[len(self.items)-1] //返回栈内最后入栈的数据,也就是栈顶的数据,这个操作和下面的size方法一样,不修改栈。 def size(self):
return len(self.items) //栈内还剩多少数据
我们首先实例化Stack类:
s = Stack()
s.isEmpty()
s.push("a")
s.push(1)
s.push(2)
s.size()
s.peek()
s.pop()
s.pop()
s.pop()
结果如下:

三、栈的简单应用
括号判定,括号一般都是成对出现,如果位置错乱或者不成对,括号不能左右刚好消除,则括号判定为False,比如“(()()(”,而"((()))",括号左右能消除,判定为True。
在这个一判定的过程中,我们要从左到右扫描,扫描到“(”,我们并不能及时处理,而是要看看是否有与其对应的“)”,那么此时便需要一个暂时放“(”的地方,这个地方就是栈。
def parChecker(symbolString):
s=Stack()
balanced = True
index = 0
while index < len(symbolString) and balanced:
symbol = symbolString[index]
if symbol == "(":
s.push(symbol) else:
if s.isEmpty():
balanced = False
else:
s.pop() index = index + 1 if balanced and s.isEmpty():
return True else:
return False print(parChecker("(((())))"))
代码参考慕课《数据结构与算法python版》
栈及其简单应用(python代码)的更多相关文章
- 几句简单的python代码完成周公解梦功能
<周公解梦>是靠人的梦来卜吉凶的一本于民间流传的解梦书籍,共有七类梦境的解述.这是非常传统的中国文化体系的一部分,但是如何用代码来获取并搜索周公解梦的数据呢?一般情况下,要通过爬虫获取数据 ...
- 简单的python代码实现语音朗读
昨天女友生日,因为她一直对生日无感,所以我也就没有准备什么礼物.想起元旦前写的自动测试的脚本,添加了语音来提示测试和报告错误.灵机一动,为什么不用这个语音来庆祝她生日快乐呢?身为设计公司市场经理的她对 ...
- 1.如何在Cloud Studio上执行Python代码?
1.在python文件下新建python文件,输入文件名后按Enter键生成,比如: one.py . 2.简单输入python代码: print "haha" 3.打开左下角的终 ...
- python教程:用简单的Python编写Web应用程序
python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分 ...
- 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出
第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...
- 栈及其简单应用(二)(python代码)
一.括号判定 前一篇文章我们介绍了栈的简单应用中,关于括号的判定,但那只是一种括号的判定,下面我们来介绍多种括号混合使用时,如何判断括号左右一一对应. 比如“{}{(}(][”这种情况,需要对一种括号 ...
- 洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯
前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm--一个专门为python而生的IDE 按照惯例,第一个python代码 ...
- 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)
本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...
- 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)
最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...
随机推荐
- 【翻译】.NET 5中的性能改进
[翻译].NET 5中的性能改进 在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进. 从.NET Core 2.0到.NET Core 2.1到.NET Core ...
- 软件测试中的微信小程序怎么测试?
1.没有需求文档时,如何测试小程序?现在大多数公司的开发模式是:敏捷模式(用户故事) ,即以什么身份做什么事情会出现什么样的结果.那实际测试过程中,没有需求文档时,测试可以采用以下方式更好的完成测试工 ...
- mdk/iar汇编区别
在代码移植中,经常遇到iar的代码转换问题,在此不间断记录一些,个人感觉还是IAR的更接近C一些,备查: 1. #ifdef的使用 // IAR #ifdef MACRO_XX #endif // M ...
- ResNeXt论文阅读笔记.md
目录 1. 提出背景 2. 核心思想 3. 论文核心 4. 分组卷积 5. 核心代码 论文: Aggregated Residual Transformations for Deep Neural N ...
- 【JVM之内存与垃圾回收篇】程序计数器
程序计数器 介绍 JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息.CPU 只有把数据装载 ...
- 【mysql】- 索引使用篇
回顾 每个索引都对应一棵B+树,B+树分为好多层,最下边一层是叶子节点,其余的是内节点.所有用户记录都存储在B+树的叶子节点,所有目录项记录都存储在内节点. InnoDB 存储引擎会自动为主键(如果没 ...
- springboot整合邮件发送(163邮箱发送为例)
先登录163邮箱获取授权 勾选后安装提示会叫你设置授权密码之类的:记住授权的密码 1.引入maven依赖 <dependency> <groupId>org.springfr ...
- macOS 遇到 svnadmin无法使用的情况
首先,我在网上查了很多资料,大多数开发者都是表明了mac内置svn,然后直接使用svnadmin来创建仓库,但是我用命令行敲入svnadmin却显示找不到svnadmin.最开始,有个资料说用whic ...
- MapReduce之WritableComparable排序
@ 目录 排序概述 获取Mapper输出的key的比较器(源码) 案例实操(区内排序) 自定义排序器,使用降序 排序概述 排序是MapReduce框架中最重要的操作之一. Map Task和Reduc ...
- Python break语句
Python break语句:当运行到 break 语句时,终止包含 break 的循环语句. 注:无论判断条件是否达到 False 或 序列是否遍历完都会停止执行循环语句和该 break 下的所有语 ...