📜  门| GATE-CS-2002 |第 50 题(1)

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

题目描述

给出一个由数字和运算符组成的算术表达式(不含括号),请编写程序将其转换为逆波兰式(也称后缀表达式)。

输入格式

一行,包含一个由数字和运算符组成的算术表达式,其中数字和运算符之间用空格隔开。

运算符包括 +、-、*、/ 和 ^,分别表示加法、减法、乘法、除法和指数运算。

输出格式

一行,为逆波兰式后缀表达式,数字和运算符之间同样用空格隔开。

注意不包含括号。

输入样例
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
输出样例
3 4 2 × 1 5 − 2 3 ^ ^ ÷ +
思路

将中缀表达式转换为后缀表达式,需要用到栈。 从左向右扫描中缀表达式,数字和左括号直接输出,遇到运算符则与栈顶运算符的优先级进行比较,如果当前运算符的优先级小于等于栈顶的运算符优先级,则将栈顶运算符输出并弹出栈,循环比较之前的规则,直到遇到一个优先级小于当前运算符的栈顶元素,此时将当前运算符入栈。 一直到扫描完中缀表达式,将栈内所有运算符弹出并输出。

代码实现
def infix2Postfix(expr):
    stack = []
    output = []
    priority = {'+':1, '-':1, '*':2, '/':2, '^':3}
    for token in expr.split(' '):
        if token.isdigit():
            output.append(token)
        elif token in '+-*/^':
            while stack and stack[-1] in '+-*/^' and priority[stack[-1]] >= priority[token]:
                operator = stack.pop()
                output.append(operator)
            stack.append(token)
    while stack:
        operator = stack.pop()
        output.append(operator)
    return ' '.join(output)
返回markdown格式
门| GATE-CS-2002 |第 50 题
题目描述

给出一个由数字和运算符组成的算术表达式(不含括号),请编写程序将其转换为逆波兰式(也称后缀表达式)。

输入格式

一行,包含一个由数字和运算符组成的算术表达式,其中数字和运算符之间用空格隔开。

运算符包括 +、-、*、/ 和 ^,分别表示加法、减法、乘法、除法和指数运算。

输出格式

一行,为逆波兰式后缀表达式,数字和运算符之间同样用空格隔开。

注意不包含括号。

输入样例
3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
输出样例
3 4 2 × 1 5 − 2 3 ^ ^ ÷ +
思路

将中缀表达式转换为后缀表达式,需要用到栈。 从左向右扫描中缀表达式,数字和左括号直接输出,遇到运算符则与栈顶运算符的优先级进行比较,如果当前运算符的优先级小于等于栈顶的运算符优先级,则将栈顶运算符输出并弹出栈,循环比较之前的规则,直到遇到一个优先级小于当前运算符的栈顶元素,此时将当前运算符入栈。 一直到扫描完中缀表达式,将栈内所有运算符弹出并输出。

代码实现
def infix2Postfix(expr):
    stack = []
    output = []
    priority = {'+':1, '-':1, '*':2, '/':2, '^':3}
    for token in expr.split(' '):
        if token.isdigit():
            output.append(token)
        elif token in '+-*/^':
            while stack and stack[-1] in '+-*/^' and priority[stack[-1]] >= priority[token]:
                operator = stack.pop()
                output.append(operator)
            stack.append(token)
    while stack:
        operator = stack.pop()
        output.append(operator)
    return ' '.join(output)