应用栈的python程序实例_栈(Stack)及其应用-Python实现

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
  • 栈顶(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):
    """
    由于只检查()是否平衡,比较简单
    思路是,
        遇到( 则将( 进栈
        遇到 )则将当前栈顶的( 出栈
        如果是这两个符号以外的其他字符,则不执行任何操作
    如果:
        在执行 )出栈的时候,栈已经为空,则表示符号不平衡【说明 )更多】
  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值