中缀转后缀,计算结果

中缀转后缀

import queue

#判断符号优先符
def compareII(a,b):
    if (a=='+' or a=='-') and (b=='*' or b=='/'):
        return 0
    elif a=='(' or b=='(':
        return 0
    return 1

#中缀变后缀
# 1)一个数字栈
# 2)一个符号栈
# 3)判断符号的优先级
# 4)数字栈跳到符号栈
# 5)输出符号栈
def show(line):
    opStack = []
    rsList = []

    for i in line:
        p = None
        if i in ['0','1','2','3','4','5','6','7','8','9']:
            rsList.append(i)
        else:
            if not opStack:
                p = i
                opStack.append(i)
                continue
            else:
                p = opStack[len(opStack)-1]

            if compareII(p,i):
                while opStack and compareII(p,i):
                    if opStack:
                        p = opStack[len(opStack)-1]
                    o = opStack.pop()
                    if o!='(' and o!=')':
                        rsList.append(o)
                if not opStack:
                    opStack.append(i)
            else:
                opStack.append(i)
    print(rsList)

#计算结果
def calculate(line):
    opStack = []
    rsList = []

    for i in line:
        p = None
        if i in ['0','1','2','3','4','5','6','7','8','9']:
            rsList.append(i)
        else:
            if not opStack:
                p = i
                opStack.append(i)
                continue
            else:
                p = opStack[len(opStack)-1]

            if compareII(p,i):
                while opStack and compareII(p,i):
                    if opStack:
                        p = opStack[len(opStack)-1]
                    o = opStack.pop()
                    if o!='(' and o!=')':
                        if o=='+' and rsList:
                            rsList.append(int(rsList.pop())+int(rsList.pop()))
                        elif o=='-' and rsList:
                            a = int(rsList.pop())
                            b = int(rsList.pop())
                            rsList.append(b-a)
                        elif o=='*' and rsList:
                            rsList.append(int(rsList.pop())*int(rsList.pop()))
                        elif o=='/' and rsList:
                            a = int(rsList.pop())
                            b = int(rsList.pop())
                            rsList.append(b / a)
                if not opStack:
                    opStack.append(i)
            else:
                opStack.append(i)
    print(rsList)


if __name__ == '__main__':
    line = '(3+4)*5+7-(2+1)*9='
    show(line)
    calculate(line)
    

运算截图:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值