中缀表达式转化为后缀表达式:
1、若为数字,输出
2、若为“(”,直接入栈
3、若为“)”,出栈,直到遇到“(”
4、若为运算符:
为乘除:优先级最高,直接入栈,
为加减:和栈顶元素比较优先级,若比栈顶元素优先级低或栈顶元素为“(”,则栈顶出栈,再和栈顶元素优先级比较,若比栈顶元素优先级高,则入栈
用list来代替栈
def trans(s):
stack=[]
for c in s:
if c.isdigit():
print(c,end='')
elif c=='*' or c=='/' or c=='(': #"*","/","(直接压栈"
stack.append(c)
elif c=='+' or c=='-': #"+","-"需要和栈顶元素比较优先级
if stack==[]: #栈为空
stack.append(c)
elif stack[len(stack)-1]=='(': #大于栈顶元素,压栈
stack.append(c)
else:
while stack!=[] and stack[len(stack)-1]!='(':
print(stack.pop(),end='')
stack.append(c)
elif c==')': #右括号,出栈,直到找到左括号为止
stop=False
while not stop :
char=stack.pop()
if char=='(':
stop=True
else:
print(char,end='')
while stack!=[]: #字符串中所有元素都已遍历完直接将栈中元素出栈
print(stack.pop(),end='')
s=input("请输入中缀表达式")
trans(s)