python堆栈的描述_Python for USACO——堆栈

堆栈简介

如上图所示,图中的书籍 和 托盘架都有一个共同的特性,那就是当你准备放入一本新书和托盘时,都是直接放到最上端,而当你要拿一本书或者托盘时,也是从最上面获取,概括起来就是数据的存储和获取是依照后进先出(LIFO:Last in First out)的顺序进行的,我们把具备这种特性的结构叫做堆栈。

堆栈是使用非常广泛的一种数据结构,例如当你使用浏览器的时候,有一种操作叫做“返回”,就是回退到上一个页面,这个操作的实现就是通过堆栈来实现的。浏览器会把每一个页面推进堆栈中,当你要回退的时候,则是把栈顶的页面重新显示出来。除了浏览器外,各种文字编辑中的“Undo” 操作也是类似的原理实现的。

堆栈的ADT描述

在之前的文章中,我们介绍过,学习数据结构就是要搞清楚两件事情:

1. 数据是以什么样的结构存储的?

2. 如何对数据进行增、删、查、改等操作

接下来我们针对堆栈来回答这两个问题。从上一章节的描述,大家可以了解到,堆栈是一个有次序的数据集,它需要区分数据插入的顺序,这样才能确保后进先出(LIFO)的操作,因此数据只需要确保按照次序存储,能够区分次序即可,所有的线形数据结构(例如 list)都能满足这个要求。堆栈的操作比较简单,如上图,它基本上都是在堆栈的顶端对数据进行增加,删除,查找的操作,完整的堆栈操作定义如下:

堆栈的Python 实现

那么如何使用Python来实现这样的一个数据结构呢?我们上次介绍过, Python中的 Class 是适合描述ADT的,在具体实现中,我们使用Python内置的list 来存放数据,然后通过list 的操作来实现堆栈所定义的几个操作,具体代码如下:

堆栈的应用举例

接下来大家看看以下题目应该如何求解?

在这道题目中,括号的匹配必须符合“平衡”原则,也就是说,每个开括号都要对应一个闭括号,其次括号要一层层正确嵌套匹配。

解这类题目就需要使用到 堆栈 数据结构了,思路是,把所有的开括号压栈,当碰到闭括号的时候,就从堆栈中把最上面的括号拿出来进行匹配,如果能够匹配,就继续下去,否则就说明表达式的括号匹配存在错误。

总结

通过今天的学习,大家对堆栈应该已经有了一个基本的认知,堆栈是一种应用的非常广泛的数据结构,它的后进先出(FILO)特性,适合很多场景。堆栈这种数据结构涉及的操作并不多,在Python中使用 list 就能实现堆栈的所有操作。

作业

请大家登陆 www.usaco.vip 网站,然后搜索以下几道题目进行解答:

00038 :表达式括号匹配

00039 :括号匹配检验

00040 :字符串匹配问题

00041 :中缀表达式

更多精彩内容,请关注公众号:USACO竞赛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值