优化代码以提高中缀表达式计算效率

本文将介绍如何优化代码,以提高中缀表达式计算效率。我们将探讨以下几点优化方法:

  1. 减少数据弹入和弹出栈的次数: 在计算过程中,我们可以使用一个列表(数组)来替代栈,利用索引来表示栈顶位置,减少数据的移动。
  2. 将运算符的优先级定义为一个字典: 将运算符的优先级定义为一个字典,以运算符作为键,优先级作为值,避免多次调用 get_priority 函数。
  3. 将运算符的处理逻辑封装为一个函数: 将运算符的处理逻辑封装为一个函数,减少重复代码。

以下是基于上述优化的示例代码:

def calculate(expression):
    operators = []
    operands = []
    priority = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}

    def apply_operator():
        b = operands.pop()
        a = operands.pop()
        operator = operators.pop()
        if operator == '+':
            operands.append(a + b)
        elif operator == '-':
            operands.append(a - b)
        elif operator == '*':
            operands.append(a * b)
        elif operator == '/':
            if b == 0:
                raise ValueError('INVALID')
            operands.append(a // b)
        elif operator == '^':
            result = 1
            for _ in range(b):
                result *= a
            operands.append(result)

    num = ''
    for char in expression:
        if char.isdigit():
            num += char
        else:
            if num:
                operands.append(int(num))
                num = ''
            if char == '(': 
                operators.append(char)
            elif char == ')':
                while operators[-1] != '(': 
                    apply_operator()
                operators.pop()  # 弹出左括号
            elif char in priority:
                while operators and priority[char] <= priority[operators[-1]]:
                    apply_operator()
                operators.append(char)

    if num:
        operands.append(int(num))

    while operators:
        apply_operator()

    return operands[0]

# 读取输入的中缀表达式
expressions = []
while True:
    try:
        expression = input()
        if not expression:
            break
        expressions.append(expression)
    except EOFError:
        break

# 计算并输出结果
for expression in expressions:
    try:
        result = calculate(expression)
        print(result)
    except ValueError as e:
        print(str(e))

在优化后的代码中,使用列表(数组)来代替栈的数据结构,通过索引 [-1] 表示栈顶元素,避免了元素的移动。同时,将运算符的优先级存储为字典 priority,以运算符作为键,优先级作为值,避免了多次调用 get_priority 函数。运算符的处理逻辑被封装在 apply_operator 函数中,减少了重复代码。

这些优化可以进一步提高代码的运行效率和可读性。请尝试运行优化后的代码,并检查是否满足预期的输出结果。

如果你还有其他问题,请随时告诉我。

优化代码以提高中缀表达式计算效率

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

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