数据结构 06-栈的应用:表达式求值的代码实现

目   录

1. 栈的应用场景

1.1 实际应用场景

1.2 例题分类

2. 应用场景:表达式求值

2.1 迷宫求解例题

2.2 表达式求值代码实现       

2.3 代码实现运行结果


1. 栈的应用场景

1.1 实际应用场景

        总的来说,栈的运用还是非常广泛的,在实际的编程场景中,支持文本编辑器、字处理程序、电子表格程序、绘图程序或类似的应用程序中的撤销功能,支持维护 Web 浏览器所访问过的连接的历史记录。

1.2 例题分类

        常见的例题有下面四种,会依次进行讲解,本章只讲表达式求值。

        括号匹配:请看数据结构 03-栈的应用:括号匹配的代码实现_江南野栀子的博客-CSDN博客
        数制转换:请看数据结构 03-栈的应用:数制转换的代码实现_江南野栀子的博客-CSDN博客
        迷宫求解:请看数据结构 04-栈的应用:迷宫求解的代码实现_江南野栀子的博客-CSDN博客
        表达式求值

2. 应用场景:表达式求值

        逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)。

2.1 迷宫求解例题

        例题参看: 150. 逆波兰表达式求值 - 力扣(LeetCode) (leetcode-cn.com)

        例题内容:

        根据 逆波兰表示法,求表达式的值。

        有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

        注意 两个整数之间的除法只保留整数部分。

        可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

2.2 表达式求值代码实现
       

def evalRPN(tokens):
        stack=[]
        res=0
        for token in tokens:
            if(token in ["+","-","*","/"]):
                num1=int(stack.pop())
                num2=int(stack.pop())
                new_num=None
                if(token == "+"):
                    new_num=num2+num1
                elif(token == "-"):
                    new_num=num2-num1
                elif(token == "*"):
                    new_num=num2*num1
                elif(token == "/"):
                    new_num=int(num2/num1)
                else:
                    return(None)
                stack.append(new_num)
            elif(token.startswith("-")):
                stack.append((0-int(token[1:])))
            elif(token.isnumeric()):
                stack.append(token)
            else:
                return("NULL {0}".format(token))
        return(int(stack.pop()))

2.3 代码实现运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值