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.计算逆波兰表达式
直接顺序扫描结果数组,遇到运算数入栈,遇到运算符,按规则出栈并计算,并将计算结果入栈。