算法学习一之逆波兰表达式

1.逆波兰表达式也称后缀表达式,即操作符在操作数之后。


2.如何将数字表达式转换为逆波兰表达式

(1)算法如下:

        设置两个栈,一个操作符栈,一个结果数组。操作符栈栈顶元素初始化为'\0'。运算符的优先级定为+-小于*/。

        如果读入的是运算数,直接存入结果数组。

        如果读入的是运算符,如果当前运算符的优先级大于操作符栈顶运算符的优先级,直接将当前运算符入运算符栈;如果当前运算符的优先级小于或者等于操作符栈顶运算符的优先级,将操作符栈顶运算符出栈再存入结果数组,再将当前运算符入栈到操作符栈。

       如果读入的是(,直接入操作符栈。

       如果读入的是),将操作符栈中的符号全都出栈再存入结果数组,直到遇到(,并将(出栈。


(2)代码如下:用的是python语言

import types


numbers=[1,'+',2,'*','(',3,'+',4,'-',5,')','/',6]
characters=[]
result=[]
characters.append('\0')
priority={}
priority['\0']=-1
priority['+']=0
priority['-']=0
priority['*']=1
priority['/']=1
priority['(']=-1#(后面的任何运算符都得入栈
print(numbers)

while numbers:
    aChar=numbers.pop(0)
    if type(aChar) == type(1):
        print(aChar)
        result.append(aChar)
    elif aChar == '(':
        characters.append(aChar)
    elif aChar == ')':
        bChar=characters.pop()
        while bChar!='(':
            print(bChar)
            result.append(bChar)
            bChar=characters.pop()
    else:
        topChar=characters[len(characters)-1]
        if priority[aChar]>priority[topChar]:
            characters.append(aChar)
        else :
            while priority[aChar]<=priority[topChar]:
                bChar=characters.pop()
                print(bChar)
                result.append(bChar)
                topChar=characters[len(characters)-1]
            characters.append(aChar)

while characters:
    result.append(characters.pop())
    
while result:
    print(result.pop())


3.计算逆波兰表达式

直接顺序扫描结果数组,遇到运算数入栈,遇到运算符,按规则出栈并计算,并将计算结果入栈。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值