将中缀表达式转换为后缀表达式,大家应该都很熟悉。具体过程为先为可能出现的括号和操作符('(','+','-','*','/‘,'^'等)赋一个优先级,其中'('优先级最低。然后顺次扫描输入的表达式(即字符串),
1. 碰到'('时,直接入栈
2. 碰到操作符时,如果优先级大于栈顶操作符的优先级,则入栈,否则将其直接输出
3. 碰到')'时,将栈中的所有操作符出栈直到碰到'('时为止,但并不输出'('
4. 对于操作数直接输出
算法涉及四种输入(左括号,右括号,操作符和操作数)和两种操作(入栈和持续出栈)。另外就是语言方面,python的print默认是换行的,虽然在语句后加逗号可以在同一行,但是会在逗号后加一个空格,如果要既不换行也不加空格,网上的方法都是用sys.stdout.write()。此外,input()和raw_input()最大的区别就是input()返回一个整数而raw_input()返回的是字符串。要访问字符串中的每个字符,在python中可以直接用for c in str。
import sys
priority={'(':0,'+':1,'-':2,'*':3,'/':4,'^':5}
stack=[]
t=input()
while t:
exp=raw_input()
for c in exp:
if c=='(':
stack.append(c)
elif c==')':
while 1:
p=stack.pop()
if p<>'(':
sys.stdout.write(p)
else:
break;
elif c=='+' or c=='-' or c=='*' or c=='/' or c=='^':
if priority[c]>priority[stack[-1]]:
stack.append(c)
else:
sys.stdout.write(c)
else:
sys.stdout.write(c)
print
t=t-1