使用 Python 编写一个中缀表达式转后缀表达式的算法:/n/npython/nimport re/n/ndef infix_to_postfix(expression):/n # 创建空运算符栈和空后缀表达式列表/n operator_stack = []/n postfix_expression = []/n/n # 使用正则表达式把中缀表达式分割为运算符和运算数列表/n tokens = re.findall(r'[-+*/()]|/d+', expression)/n/n # 遍历运算符和运算数列表/n for token in tokens:/n if token.isdigit():/n # 如果是操作数,将其添加到后缀表达式列表中/n postfix_expression.append(token)/n elif token == '(': /n # 如果是左括号,将其推入运算符栈中/n operator_stack.append(token)/n elif token == ')':/n # 如果是右括号,则将运算符栈元素弹出并添加到后缀表达式列表中,直到遇到左括号为止/n while operator_stack and operator_stack[-1] != '(': /n postfix_expression.append(operator_stack.pop())/n operator_stack.pop() # 弹出左括号/n else:/n # 如果是运算符,则将其与运算符栈顶运算符进行比较/n while operator_stack and operator_stack[-1] != '(' and precedence(operator_stack[-1]) >= precedence(token):/n # 如果栈顶运算符优先级高于或等于当前运算符,则将栈顶运算符弹出并添加到后缀表达式列表中/n postfix_expression.append(operator_stack.pop())/n operator_stack.append(token) # 将当前运算符推入运算符栈中/n/n # 将运算符栈中剩余的运算符弹出并添加到后缀表达式列表中/n while operator_stack:/n postfix_expression.append(operator_stack.pop())/n/n # 将后缀表达式列表转换为字符串,运算数和运算符彼此都用一个空格隔开/n return ' '.join(postfix_expression)/n/ndef precedence(operator):/n # 定义运算符的优先级/n if operator in ['+', '-']:/n return 1/n elif operator in ['*', '/']:/n return 2/n else:/n return 0/n/n# 读取输入中缀表达式/nexpression = input()/n/n# 调用函数进行中缀表达式转后缀表达式/npostfix_expression = infix_to_postfix(expression)/n/n# 输出后缀表达式/nprint(postfix_expression)/n/n/n使用示例:/n输入:9+(3-1)*3+10/2/n输出:9 3 1 - 3 * + 10 2 / +

中缀表达式转后缀表达式算法 Python 实现

原文地址: https://www.cveoy.top/t/topic/czRN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录