中缀表达式转后缀
提交数: 572, 通过率: 30.07%, 平均分: 43.74
题目描述:
将输入的中缀表达式转成后缀表达式输出。
注意:输入数据保证数字都为正整数,可能有0。
输入格式:
输入一行表示中缀表达式。
输出格式:
输出对应的后缀表达式,运算数、运算符之前均以一个空格分开。
数据范围:
中缀表达式中的字符在100之内。
样例输入:
1+(3+2)*(7^2+6*9)/(2)
样例输出:
1 3 2 + 7 2 ^ 6 9 * + * 2 / +
提示:
中缀表达式转后缀表达式,具体规则如下:
(1)遇到数直接输出,不进栈;
(2)遇到运算符或括号:
1) 左括号,直接进栈;
2)右括号,把栈中的运算符依次出栈,直到碰到第一个左括号为止;
3)运算符,把栈中优先级别大于等于它的运算符依次出栈,直到左括号或栈底。
请完善以下程序:
gs = input()
st1 = []
st2 = []
js = ""
dic={ "^":3, "*":2, "/":2, "+":1, "-":1 }
for i in range(len(gs)):
if "0" <= gs[i] <= "9":
_______________ #填空1
else:
if len( js ) > 0:
st1.append( js )
js = ""
if gs[i] == ")":
while st2[ -1 ] != "(":
____________________ #填空2
st2.pop()
elif gs[ i ] == "(":
__________________ #填空3
elif gs[ i ] in [ "*", "+", "-", "^", "/" ] :
while _________________________________________: #条件易错 填空4
st1.append( st2.pop() )
st2.append( gs[i] ) #易错
if ___________________: #这个条件易忽略 填空5
st1.append( js )
while len( st2 ) != 0:
st1.append( st2.pop() )
print( " ".join( st1 ) )
时间限制: 1000ms空间限制: 256MB
来源: 原创