中序式转后序式数据结构代码
下面是一个将中序表达式转换为后序表达式的代码实现:
def infix_to_postfix(expression):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
stack = []
postfix = ""
for char in expression:
if char.isalnum():
postfix += char
elif char == '(':
stack.append(char)
elif char == ')':
while stack and stack[-1] != '(':
postfix += stack.pop()
if stack and stack[-1] == '(':
stack.pop()
else:
while stack and stack[-1] != '(' and precedence[char] <= precedence.get(stack[-1], 0):
postfix += stack.pop()
stack.append(char)
while stack:
postfix += stack.pop()
return postfix
# 示例用法
expression = "A+B*C-(D/E+F)*G"
postfix_expression = infix_to_postfix(expression)
print(postfix_expression)
这段代码中,我们首先定义了运算符的优先级字典 precedence,然后定义了一个空栈 stack 和一个空字符串 postfix 用于保存后序表达式。
然后我们遍历中序表达式的每个字符。如果字符是字母或数字,我们将其直接追加到后序表达式中。如果字符是左括号 (,我们将其压入栈中。如果字符是右括号 ),我们将栈顶的运算符弹出并追加到后序表达式中,直到遇到左括号为止。最后,如果字符是运算符,我们将栈顶的运算符弹出并追加到后序表达式中,直到栈为空或栈顶的运算符优先级小于当前运算符。
最后,我们将栈中剩余的运算符弹出并追加到后序表达式中,然后返回后序表达式。
以上代码的输出结果为 ABC*+DE/F+G*-,即为输入中序表达式 A+B*C-(D/E+F)*G 的后序表达式
原文地址: https://www.cveoy.top/t/topic/hBNE 著作权归作者所有。请勿转载和采集!