📜  门| GATE-CS-2014-(Set-2)|问题11(1)

📅  最后修改于: 2023-12-03 15:28:43.951000             🧑  作者: Mango

门| GATE-CS-2014-(Set-2)|问题11

这是一个关于逆波兰表示法的问题。逆波兰表示法是一种计算机科学中的表达式表示方法,也叫后缀表达式。在逆波兰表示法中,所有的操作符都在操作数的后面。

例如,中缀表达式 3+(4*5) 在逆波兰表示法中为 3 4 5 * +

以下是这道题的问题描述和程序示例:

给出一个包含整数和操作符的字符串列表,使用逆波兰表示法计算该表达式的值。

例如,["2", "1", "+", "3", "*"] 应返回 9,因为 2 + 1 = 3,然后将 3 乘以 3 得到 9

程序示例
def evalRPN(tokens):
    stack = []
    for token in tokens:
        if token not in ["+", "-", "*", "/"]:
            stack.append(int(token))
        else:
            b = stack.pop()
            a = stack.pop()
            if token == "+":
                stack.append(a+b)
            elif token == "-":
                stack.append(a-b)
            elif token == "*":
                stack.append(a*b)
            else:
                stack.append(int(float(a)/b))
    return stack[-1]

这个程序的功能是使用栈来实现逆波兰表达式求值。首先创建一个空栈 stack,然后遍历输入的字符串列表 tokens。如果当前 token 是操作数,则将其转换为整数并将其推入栈中。如果当前 token 是操作符,则从栈中弹出两个操作数 ab,对其进行相应的运算并将运算结果推入栈中。

最后,返回栈顶的元素,即为该逆波兰表达式的计算结果。