#中缀表达式转后缀表达式 def in2post(infix): res = [] #后缀列表 opStack = Stack() #运算符栈 #优先级字典 pre = {"(" : 1,"+" : 2,"-" : 2,"*" : 3,"/" : 3}; f = 1 #遍历中缀表达式列表,4种情况(,),运算符,操作数 while infix: c = infix[0] if c == '(': #左括号入栈 opStack.push(c) if infix[1] == '-': #符号位 f = -1 infix = infix[1:] elif infix[1] == '+': # 可能为首的操作数前面会有一个‘+’号,若是则直接跳过 infix = infix[1:] elif c == ')': #右括号出栈 while True: tmp = opStack.pop() if tmp == "(": break res.append(tmp) elif c in "+-*/": #栈顶运算符的优先级大于等于当前运算符c的优先级就出栈 while not opStack.isEmpty() and \ pre[opStack.peek()] >= pre[c]: res.append(opStack.pop()) opStack.push(c) else: #4.操作数,直接加入结果列表 data = '' while infix and ('0' <= infix[0] <= '9' or infix[0] == '.'): data += infix[0] infix = infix[1:] #print(n,infix,i,j,infix[i:j]) if f == -1: res.append("-" + data) f = 1 else: res.append(data) continue infix = infix[1:] #操作符栈只要非空就出栈,加入结果列表 while not opStack.isEmpty(): res.append(opStack.pop()) return " ".join(res) #print(in2post("a + b * c")) print(in2post('(' + input() + ')'))解释每行代码
时间: 2024-01-25 09:03:00 浏览: 123
好的,下面是每行代码的解释:
```
#中缀表达式转后缀表达式
def in2post(infix):
res = [] #后缀列表
opStack = Stack() #运算符栈
#优先级字典
pre = {"(" : 1,"+" : 2,"-" : 2,"*" : 3,"/" : 3};
f = 1 #符号位标志,1表示正数,-1表示负数
#遍历中缀表达式列表,4种情况(,),运算符,操作数
while infix:
c = infix[0] #取出中缀表达式的第一个字符
if c == '(': #如果是左括号,入栈
opStack.push(c)
if infix[1] == '-': #如果下一个字符是负号,标记符号位为-1
f = -1
infix = infix[1:]
elif infix[1] == '+': #如果下一个字符是正号,直接跳过
infix = infix[1:]
elif c == ')': #如果是右括号,出栈直到遇到左括号
while True:
tmp = opStack.pop()
if tmp == "(":
break
res.append(tmp)
elif c in "+-*/": #如果是运算符
#栈顶运算符的优先级大于等于当前运算符c的优先级就出栈
while not opStack.isEmpty() and pre[opStack.peek()] >= pre[c]:
res.append(opStack.pop())
opStack.push(c)
else: #如果是操作数,直接加入结果列表
data = ''
while infix and ('0' <= infix[0] <= '9' or infix[0] == '.'):
data += infix[0]
infix = infix[1:]
#根据符号位标志,加入结果列表
if f == -1:
res.append("-" + data)
f = 1
else:
res.append(data)
continue
infix = infix[1:]
#操作符栈只要非空就出栈,加入结果列表
while not opStack.isEmpty():
res.append(opStack.pop())
return " ".join(res)
print(in2post('(' + input() + ')')) #将输入的中缀表达式转换为后缀表达式并输出
```
这段代码的作用是将输入的中缀表达式转换为后缀表达式。
阅读全文