python【栈】 后缀表达式求值

文章目录

题目

根据后缀表达式,求出运算结果。
假设:

  • 后缀表达式是由空格为分隔符的字符串
  • 操作符是*, /, +, -
  • 操作数都是个位数

代码中的Stack()来自于python实现栈Stack

思路

  1. 创建一个空栈operandStack
  2. 把后缀表达式postfixExpr由字符串转为列表tokenList
  3. 从左到右扫描这个列表tokenList中的每一个token
    1. 如果token是一个操作数,就把它转为int类型,并压入operandStack
    2. 如果token是一个操作符, *, /, +, -等,就对operandStack进行两次pop操作。第一次pop得到的是第二个操作数,第二次pop得到的是第一个操作数。然后执行数学运算,并把结果压入operandStack
  4. 当后缀表达式被处理完毕,栈中保存的就是运算结果。将栈中的元素弹出,并返回这个值
# 后缀表达式求值
def postfixEval(postfixExpr):
    operandStack = Stack()
    tokenList = postfixExpr.split()
    for token in tokenList:
        if token in "0123456789":
            operandStack.push(int(token))
        else:
            operand2 = operandStack.pop()  # 操作数2
            operand1 = operandStack.pop()  # 操作数1
            result = doMath(token, operand1, operand2)
            operandStack.push(result)
    return operandStack.pop()

def doMath(op, op1, op2):
    if op == "*":
        return op1 * op2
    elif op == "/":
        return op1 / op2
    elif op == "+":
        return op1 + op2
    else:
        return op1 - op2

print(postfixEval('7 8 + 3 2 + /'))
3.0

参考:
https://runestone.academy/runestone/static/pythonds/BasicDS/InfixPrefixandPostfixExpressions.html
python【栈】中缀表达式转后缀表达式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值