中缀转前缀表达式的栈/输入优先级表错误修正请求
优先级表修正方案
问题定位
错误结果-*+abc-de+fg^表明幂运算符^被判定为最低优先级,最后才从栈中弹出,而正确逻辑里^是整个表达式的最外层运算符(优先级最高),应当最先被处理。
修正后的优先级数值
针对核心运算符及括号,调整栈优先级(Stack Precedence, sp)与输入优先级(Input Precedence, ip)如下:
- 幂运算符
^:- 输入优先级(ip):5(高于所有算术运算符)
- 栈优先级(sp):4(适配幂运算右结合特性,确保连续幂运算时右侧运算符优先入栈)
- 乘/除运算符
*、/:- 输入优先级(ip):3
- 栈优先级(sp):3
- 加/减运算符
+、-:- 输入优先级(ip):1
- 栈优先级(sp):2
- 左括号
(:- 输入优先级(ip):6(确保能直接压入栈)
- 栈优先级(sp):0(遇到右括号时触发弹出直到左括号)
- 右括号
):- 输入优先级(ip):0(触发弹出栈顶运算符直到匹配左括号)
验证逻辑
用修正后的优先级表处理目标中缀表达式(((a+b)*c-(d-e))^(f+g)):
- 按中缀转前缀的标准逻辑(从右往左扫描表达式,或反转表达式后从左往右处理)
- 当扫描到
^时,其输入优先级(5)高于栈顶-的栈优先级(2),会先弹出所有栈中优先级低于5的运算符(-、*、+等),再将^压入栈 - 最终栈弹出顺序为
^、-、*、+、-、+,结合操作数后生成预期前缀表达式^-*+abc-de+fg
内容的提问来源于stack exchange,提问作者user23435187
相关产品推荐
相关产品推荐

