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.計算逆波蘭表達式
直接順序掃描結果數組,遇到運算數入棧,遇到運算符,按規則出棧並計算,並將計算結果入棧。