Python实现中缀表达式转后缀表达式算法(含代码示例)
Python实现中缀表达式转后缀表达式算法
本文介绍如何使用Python实现将中缀表达式转换为后缀表达式的算法。
代码实现pythondef infix_to_postfix(expression): precedence = {'(': 3, ')': 3, '&': 2, '|': 1, '!': 2} stack = [] postfix = [] tokens = expression.split()
for token in tokens: if token.isalpha(): postfix.append(token) elif token == '(': stack.append(token) elif token == ')': while stack and stack[-1] != '(': postfix.append(stack.pop()) stack.pop() else: while stack and precedence.get(token, 0) <= precedence.get(stack[-1], 0): postfix.append(stack.pop()) stack.append(token)
while stack: postfix.append(stack.pop())
return ' '.join(postfix)
示例输入和输出input_expression = 'exp1 & !(exp2 | exp3) | !exp4'output_expression = infix_to_postfix(input_expression)print(output_expression)
代码解释
- 函数
infix_to_postfix接受一个字符串类型的参数expression,表示中缀表达式。-precedence字典定义了运算符的优先级,其中括号的优先级最高,其次是逻辑非(!)、逻辑与(&)和逻辑或(|)。-stack列表用于存储运算符,postfix列表用于存储后缀表达式。- 代码首先将输入的中缀表达式按空格分割成一个个token。- 对于每个token: - 如果是字母(表示操作数),则直接将其添加到postfix列表中。 - 如果是左括号(,则将其压入stack中。 - 如果是右括号),则不断弹出stack中的运算符并添加到postfix列表中,直到遇到左括号为止(左括号也要弹出)。 - 如果是运算符,则将stack中优先级不低于当前运算符的运算符弹出并添加到postfix列表中,然后将当前运算符压入stack中。- 处理完所有token后,将stack中剩余的运算符弹出并添加到postfix列表中。- 最后,将postfix列表中的元素用空格连接起来,作为后缀表达式返回。
示例分析
- 示例输入:
exp1 & !(exp2 | exp3) | !exp4- 示例输出:exp1 exp2 exp3 | ! & exp4 ! |
注意
- 上述代码示例中的输入表达式已经过修正,去掉了多余的右括号。- 该算法可以扩展到处理更多种类的运算符和更复杂的表达式。
总结
本文介绍了使用Python实现中缀表达式到后缀表达式转换的算法,并提供了详细的代码解释和示例。该算法利用栈结构巧妙地处理了运算符的优先级,是计算机科学中一个经典的算法案例。
原文地址: https://www.cveoy.top/t/topic/1rJ 著作权归作者所有。请勿转载和采集!