数据结构(Python语言描述)- 栈

目录

1 栈概览

2 使用栈

2.1 栈接口

2.2 初始化一个栈

2.3 示例应用程序:匹配括号

3 栈的3种应用

3.1 后缀表达式

3.1.1 计算算数表达式

3.1.2 计算后缀表达式

3.1.3 将中缀表达式转换为后缀表达式

3.2 回溯算法

3.3 内存管理

4 栈的实现

4.1 测试驱动程序

4.2 将栈添加到集合层级中

4.3 数组实现

4.4 链表实现

4.5 AbstractStack类的作用

4.6 两种实现的时间和空间分析

5 案例学习:计算后缀表达式

5.1 要求

5.2 分析

5.3 设计

5.4 实现

6 小结


1 栈概览

  • 栈是线性集合,遵从后进先出原则( Last - in first - out , LIFO )原则
  • 栈常用的操作包括压入( push ) 和弹出( pop )

clip_image001

  • 栈的应用
    •  将中缀表达式转换为后缀表达式,并且计算后缀表达式的值
    • 回溯算法
    • 管理计算机内存以支持函数和方法调用
    • 支持应用程序中的撤消功能
    • 维护Web浏览器访问链接的历史记录

2 使用栈

2.1 栈接口

  • 栈不是Python的内建类型,可以用列表代替,但是列表可以在任何位置插入,删除,替换元素,这些违背了栈作为一种抽象数据类型的本意,因此需要为栈定义一种更为严格的接口
栈接口中的方法

               栈方法

作用
s.isEmpty() 如果为空返回True,否则返回False
__len__(s) 和len(s)相同,返回s中的项的数目
__str__(s) 和str(s)相同,返回s的字符串表示
s.__iter__() 和iter(s)或for item in s:相同;从底部像顶部,访问s中的每一项
s.__contains__(item) 和item in s相同,如果item在s中,返回True,否则返回False
s1.__add__(s2)

和s1+s2相同,返回一个新的栈,其中包含了s1和s2中的项

s.__eq__(anyObject) 和s==anyObject相同,如果s等于anyObject,返回True,否则返回False。如果在对应位置的项都是相同的,这两个栈就是相等的
s.clear() 将s清空
s.peek() 返回s顶部的项。先验条件:s不能为空,如果栈为空的话,将会抛出一个KeyError
s.push(item) 在s的顶部添加一项
s.pop() 在s的顶部删除一项并返回该项。先验条件:s不能为空。如果栈为空的话,将会抛出一个KeyError
  • pop和peek方法有一个重要的先验条件,如果不满足这个先验条件的话,将会导致一个异常。
  • 这个接口的优点是,用户将知道使用哪一个方法,以及这些方法接收什么参数,而不必管选择了哪一种栈实现
栈操作的效果
操作 该操作之后栈的状态 返回值
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值