You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于栈数据结构实现前缀转完全括号中缀表达式的技术问询

栈实现与前缀表达式转完全括号化中缀表达式

嘿,我来帮你搞定这个栈作业和前缀转中缀的问题!先从栈的实现说起,再一步步拆解前缀转中缀的逻辑。

第一步:实现栈函数 make_stack()

栈是典型的后进先出(LIFO)数据结构,我们需要封装它的核心操作:创建空栈、压入元素、弹出元素、判断栈是否为空。用Python实现的话,我们可以把栈的操作封装在一个函数里,返回操作方法的集合:

def make_stack():
    stack = []
    def push(item):
        stack.append(item)
    def pop():
        if not is_empty():
            return stack.pop()
        raise IndexError("栈为空,无法弹出元素")
    def is_empty():
        return len(stack) == 0
    def peek():
        if not is_empty():
            return stack[-1]
        raise IndexError("栈为空,无法查看栈顶")
    # 返回封装好的栈操作方法
    return {
        'push': push,
        'pop': pop,
        'is_empty': is_empty,
        'peek': peek
    }

这个实现用内部列表存储栈元素,对外只暴露必要的操作方法,符合数据结构的封装思想,避免直接操作底层数据导致错误。

第二步:编写 prefix_infix 函数

前缀表达式(波兰表示法)转中缀的核心逻辑是从右到左遍历表达式,结合栈来处理操作数和运算符:

  • 遇到操作数,直接压入栈;
  • 遇到二元运算符,弹出栈顶的两个操作数(注意顺序:第一个弹出的是右操作数,第二个是左操作数),将它们组合成(左操作数 运算符 右操作数)的格式,再压回栈;
  • 遍历结束后,栈中剩下的唯一元素就是完全括号化的中缀表达式。

代码实现如下:

def prefix_infix(prefix_expr):
    stack = make_stack()
    # 从右到左遍历前缀表达式的每个元素
    for token in reversed(prefix_expr):
        if token in '+-*/':
            # 弹出两个操作数,注意顺序
            left_operand = stack['pop']()
            right_operand = stack['pop']()
            # 组合成带括号的中缀形式
            infix_segment = f"({left_operand}{token}{right_operand})"
            stack['push'](infix_segment)
        else:
            # 操作数直接压入栈
            stack['push'](token)
    # 栈中最后剩下的就是最终结果
    return stack['pop']()

测试示例

  • 输入前缀表达式 ['*', '+', 'a', 'b', '-', 'c', 'd'],调用函数会返回 ((a+b)*(c-d));
  • 输入 ['/', '*', 'x', 'y', 'z'],会返回 ((x*y)/z);
  • 输入简单的 ['-', 'm', 'n'],会返回 (m-n)。

关键注意点

  • 必须从右到左遍历:这是前缀表达式转中缀的核心规则,和后缀表达式(逆波兰表示法)的遍历方向相反;
  • 操作数顺序不能搞反:因为栈是后进先出,第一个弹出的是右操作数,第二个是左操作数,组合时要保证运算符在中间、左右操作数位置正确;
  • 强制添加括号:每一组运算都用括号包裹,确保完全括号化,彻底避免运算符优先级带来的歧义。

内容的提问来源于stack exchange,提问作者Prashin Jeevaganth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:37:15