📜  前缀到后缀转换(1)

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

前缀到后缀转换

什么是前缀和后缀?

前缀表达式:把运算符放在操作数前面的表达式。

例如:2 + 3 的前缀表达式为 + 2 3。

后缀表达式:把运算符放在操作数后面的表达式。

例如:2 + 3 的后缀表达式为 2 3 +。

前缀到后缀转换的步骤

将前缀表达式从右到左依次扫描每个元素,执行以下操作:

  1. 如果当前元素是操作数,将其添加到输出队列中。
  2. 如果当前元素是运算符,弹出栈顶元素直到栈顶元素的优先级低于该运算符的优先级,然后将该运算符入栈。
  3. 如果当前元素是左括号"(",将其压入栈中。
  4. 如果当前元素是右括号")",则弹出栈顶元素直到遇到左括号为止,将弹出的所有元素添加到输出队列中,然后将左括号弹出丢弃。
代码示例(Python)
class Stack:
    def __init__(self):
        self.items = []
    
    def is_empty(self):
        return len(self.items) == 0
    
    def push(self, item):
        self.items.append(item)
    
    def pop(self):
        if not self.is_empty():
            return self.items.pop()
    
    def size(self):
        return len(self.items)

def prefix_to_postfix(expression):
    stack = Stack()
    operators = set(['+', '-', '*', '/', '(', ')'])
    for char in reversed(expression):
        if char not in operators:
            stack.push(char)
        else:
            operand1 = stack.pop()
            operand2 = stack.pop()
            stack.push(operand1 + ' ' + operand2 + ' ' + char)
    return stack.pop()

prefix_expression = '+ 2 * 3 4'
postfix_expression = prefix_to_postfix(prefix_expression)
print("Postfix expression:", postfix_expression)

以上代码使用了栈来辅助进行前缀到后缀转换,复杂度为 O(n)。