如何解决后缀的中缀:带括号的输入的输出不正确
中缀表达式: 形式为op b的表达式。当运算符位于每对操作数之间时。
后缀表达式: 形式为b op的表达式。每对操作数都跟随一个运算符。
为什么用表达式的后缀表示?
编译器从左到右或从右到左扫描表达式。
考虑以下表达式:
a op1 b op2 c op3 d
If op1 = +,op2 = *,op3 = +
编译器首先扫描表达式以求表达式b * c,然后再次扫描表达式以为其添加a。然后将结果添加到另一次扫描后的d
我的解决方案:
class Stack():
# defining the attributes
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def size(self):
return len(self.items)
def push(self,item):
self.items.append(item)
def pop(self):
if not(self.isEmpty()):
return self.items.pop()
else:
return "UNDERFLOW"
def peek(self):
return self.items[len(self.items)-1]
def InfixToPostfix(s):
precedence_dict = {'+':1,'-':1,'*':2,'/':2,'^':3}
output = []
stack1 = Stack()
for char in s:
if not char in precedence_dict:
output.append(char)
elif char == '(':
stack1.push(char)
elif char == ')':
while stack1.peek() != '(':
output.append(stack1.pop())
if stack1.peek() == '(':
stack1.pop()
else:
if stack1.isEmpty() == True:
stack1.push(char)
else: # two conditons if input_pre > top or top_pre > input_prece
precendence_input = precedence_dict[char]
precendence_top = precedence_dict[stack1.peek()]
if precendence_input > precendence_top:
stack1.push(char)
elif precendence_input <= precendence_top:
while stack1.peek() != char:
output.append(stack1.pop())
if stack1.isEmpty():
stack1.push(char)
else:
precendence_top = precedence_dict[stack1.peek()]
precendence_input = precedence_dict[char]
if precendence_input > precendence_top:
stack1.push(char)
else:
output.append(stack1.pop())
if stack1.isEmpty():
stack1.push(char)
else:
precendence_top = precedence_dict[stack1.peek()]
for _ in range(stack1.size()):
output.append(stack1.pop())
print("".join(output))
InfixToPostfix('K+L-M*N+(O^P)*W/U/V*T+Q')
输出:
KL+-MN*-(OP)^W*UV/T*+Q+
正确的输出:
KL+MN*-OP^W*U/V/T*+Q+
此代码有什么问题?
这对于没有任何括号的简单输入工作正常,但对于包含括号的输入则无效。另外,输出如何包含(
和)
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。