![38496bb6ea2f737b7bf96c08dd43e43b.png](https://img-blog.csdnimg.cn/img_convert/38496bb6ea2f737b7bf96c08dd43e43b.png)
常见数据结构的Python实现-栈
目录
1.1 基本概念
1.2 栈的实现
1.3 应用(括号匹配)
1.4 应用(中缀转后缀-整数)
1.5 应用( 中缀转后缀-浮点数)
1) 拆分表达式
2) 中缀转后缀
1.6 应用(计算中缀表达式)
1) 计算后缀表达式
2) 计算中缀表达式
1. 栈
1.1 基本概念
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。
![6df7770d9b5a37eb34108925120fd18c.png](https://img-blog.csdnimg.cn/img_convert/6df7770d9b5a37eb34108925120fd18c.png)
- 栈顶(top)
- 栈底(bottom)
- 空栈:栈中元素个数为0
- 进栈(push),即插入操作
- 退栈(pop),即删除,出栈,弹栈
复杂度分析:
栈属于常见的一种线性结构,对于进栈和退栈而言,时间复杂度都为 O(1)
本例中所有的代码实现:git仓库地址:01-栈及其应用(计算中缀表达式)
1.2 栈的实现
class Stack(object):
def __init__(self):
"""
创建一个Stack类
对栈进行初始化参数设计
"""
self.stack = [] #存放元素的栈
def push(self, data):
"""
压入 push :将新元素放在栈顶
当新元素入栈时,栈顶上移,新元素放在栈顶。
"""
self.stack.append(data)
def pop(self):
"""
弹出 pop :从栈顶移出一个数据
- 栈顶元素拷贝出来
- 栈顶下移
- 拷贝出来的栈顶作为函数返回值
"""
# 判断是否为空栈
if self.stack:
return self.stack.pop()
else:
raise IndexError("从空栈执行弹栈操作")
def peek(self):
"""
查看栈顶的元素
"""
# 判断栈是否为空
if self.stack:
return self.stack[-1]
def is_empty(self):
"""
判断栈是否为空
"""
# 栈为非空时,self.stack为True,再取反,为False
return not bool(self.stack)
def size(self):
"""
返回栈的大小
"""
return len(self.stack)
1.3 应用(括号匹配)
目标:
使用堆栈作为数据结构,检查括号字符串是否完全匹配
def balanced_parentheses(parentheses):
"""
由于只检查()是否平衡,比较简单
思路是,
遇到( 则将( 进栈
遇到 )则将当前栈顶的( 出栈
如果是这两个符号以外的其他字符,则不执行任何操作
如果:
在执行 )出栈的时候,栈已经为空,则表示符号不平衡【说明 )更多】