python数据结构课堂笔记3:栈、队列、双端队列、列表

基本结构

线性结构

线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继
第一个没有前驱,最后一个没有后继
新的数据项加入数据集中时,只会加入到原有某个数据项之前或之后
具有这种性质的数据集,就称为线性结构
线性结构总有两端,在不同情况下两端的称呼也不同
不同线性结构的关键区别在于数据项增减的方式(只允许从异端添加/允许数据项从两端移除/中间插入移除)

基本线性结构

栈Stack、队列Queue、双端队列Deque、列表List
区别:数据项增减方式不同
共同点:数据项之间只存在先后次序,都是线性结构

栈Stack

栈:一种有次序的数据项集合,在栈中,数据项的加入和移除都仅发生在同一端,栈“顶top”,栈“底base”
例:托盘、盘子、书堆

距离栈底越近的数据项,留在栈中的时间就越长(只在栈顶进行操作,而最新加入栈的数据项会被最先删除)
这种次序通常称为“后进先出LIFO”(这是一种基于数据项保存时间的次序,时间越短的离栈顶越近,而时间越长的离栈底越近)
栈特性:反转次序
“栈”是一个有次序的数据集,每个数据项仅从“栈顶”一端加入到数据集中、从数据集中移除,栈具有后进先出LIFO的特性。

栈的操作:
Stack():创建一个空栈,不包含任何数据项
push(item):将item加入栈顶,无返回值
pop():将栈顶数据项移除,并返回,栈被修改
peek():“窥视”栈顶数据项,返回栈顶的数据项但不移除,栈不被修改
isEmpty():返回栈是否为空栈
size():返回栈中有多少个数据项

Stack操作样例

Stack Operation Stack Contents Return Value
s = Stack() [] Stack object
s.isEmpty() [] True
s.push(4) [4]
s.push(‘dog’) [4,‘dog’]
s.peek() [4,‘dog’] ‘dog’
s.push(True) [4,‘dog’,True]
s.size() [4,‘dog’,True] 3
s.isEmpty() [4,‘dog’,True] False
s.push(8.4) [4,‘dog’,True,8.4]
s.pop() [4,‘dog’,True] 8.4
s.pop() [4,‘dog’] True
s.size() [4,‘dog’] 2

用python实现ADT Stack
Stack的两端对应list设置:可以将list的任意一段(index=0或-1)设置为栈顶
如list的末端(index = -1)为栈顶,pop/push复杂度为O(1)
或者把另一端首端(index = 0)作为栈顶,push/pop负责度为O(n)

表达式的前缀和后缀表示法:

中缀表达式
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值