栈属于线性结构(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代码)的更多相关文章

  1. 几句简单的python代码完成周公解梦功能

    <周公解梦>是靠人的梦来卜吉凶的一本于民间流传的解梦书籍,共有七类梦境的解述.这是非常传统的中国文化体系的一部分,但是如何用代码来获取并搜索周公解梦的数据呢?一般情况下,要通过爬虫获取数据 ...

  2. 简单的python代码实现语音朗读

    昨天女友生日,因为她一直对生日无感,所以我也就没有准备什么礼物.想起元旦前写的自动测试的脚本,添加了语音来提示测试和报告错误.灵机一动,为什么不用这个语音来庆祝她生日快乐呢?身为设计公司市场经理的她对 ...

  3. 1.如何在Cloud Studio上执行Python代码?

    1.在python文件下新建python文件,输入文件名后按Enter键生成,比如: one.py . 2.简单输入python代码: print "haha" 3.打开左下角的终 ...

  4. python教程:用简单的Python编写Web应用程序

    python现在已经成为很多程序员关注的编程语言之一,很多程序员也都开始弄python编程,并且很多时候都会用自己的操作来选择,而现在不管是程序员还是少儿编程,都会有python这门课,今天就和大家分 ...

  5. 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出

    第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...

  6. 栈及其简单应用(二)(python代码)

    一.括号判定 前一篇文章我们介绍了栈的简单应用中,关于括号的判定,但那只是一种括号的判定,下面我们来介绍多种括号混合使用时,如何判断括号左右一一对应. 比如“{}{(}(][”这种情况,需要对一种括号 ...

  7. 洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯

    前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm--一个专门为python而生的IDE 按照惯例,第一个python代码 ...

  8. 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)

    本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...

  9. 在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

    最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助. ...

随机推荐

  1. three.js 绘制3d地图

    通过地图数据配合three可以做出非常酷炫的地图,在大数据展示中十分常见. 这篇郭先生就来说说使用three.js几何体制作3D地图.在线案例点击原文地址. 地图的数据是各个地图块的点数组,通过THR ...

  2. scratch编程体感游戏

    体感游戏有很多种,最常见的就是摄像头和声控了,今天我们要用scratch编写一系列的体感游戏!!!是不是很激动呢? 首先我们来编摄像头类的: No.1拳头打幽灵 挥动头就能打到幽灵了哟! 具体程序如下 ...

  3. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  4. 【Floyd算法+贪心】 travel 计蒜客 - 45275

    题目: 有 n 个景点,从一个景点 i 旅行到另一个景点 j 要花费 Ai,j=Aj,i(n≤100),现在给出由 m(≤1e5) 个景点的组成序列 A,求:在所有 "有子序列 A 的序列中 ...

  5. 从LocalDateTime序列化探讨全局一致性序列化

    日拱一卒无有尽,功不唐捐终入海. 楔子 前两周发了三篇SpringSecurity和一篇征文,这周打算写点简单有用易上手的文章,换换脑子,休息一下. 今天要写的是这篇:从LocalDateTime序列 ...

  6. 利用Serverless应用搭建Hexo博客

    本文将介绍如何使用火爆的Serverless应用,15分钟快速搭建Hexo博客.以腾讯云提供的Serverless应用–云开发为例: 步骤1:安装 CloudBase CLI 以及本地部署 Hexo ...

  7. 今天上午完成了devicescan,发送了rar包到yzx3233@sina.com

    今天上午完成了devicescan,发送了rar包到yzx3233@sina.com 可以正常扫描和输入了. 还有一个最后的问题,就是选择退出后,程序还在后台

  8. python爬虫获取localStorage中的数据(获取token)

    # 此为获取东航登录时的token(经分析js得出此token存储于localstorage中) browser = webdriver.Chrome(executable_path='xxxx')b ...

  9. Ubuntu Linux markdown编辑工具 typora 安装

    Typora简介 Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.即时渲染使得你写Markdown就想是写Word文档一样流畅自如 ...

  10. Python创建字符串

    Python创建字符串: 一般情况下可以使用 ' 或 " 创建字符串 或 使用引用字符串变量 或 字符串表达式. # 字符串的创建 # 使用 ' 或 “ 进行创建 strs = 'ABCDE ...