Advertisement

CH 1802 表达式计算(进阶指南:栈及中序、后续表达式)

阅读量:

算法竞赛进阶指南,90页,栈
本题关键点:
1、一个数值可能由多个数字组成,在对字符串进行预处理时,需要生成中序表达式 queue inOrder;
在此次处理过程中,未考虑到负数的特殊情况;
2、将中序表达式通过栈结构转换为后缀表达式:
运算符的优先级关系如下:左括号 < 加减 < 乘除 < 乘方
具体操作流程如下:
1)当遇到一个数字时,将其输出至后缀表达式;
2)若为左括号,则将其压入栈中;
3)若遇到右括号,则不断弹出栈顶元素并输出至后缀表达式,直至遇到左括号(左括号不参与输出);
4)当遇到新的运算符(new),与栈顶运算符(top)进行优先级比较,若 new 的优先级大于等于 top,则将 top 弹出并加入到后缀数组中,最终将 new 压入栈内;
最后,将栈中剩余的所有运算符依次输出至后缀表达式。
3、根据后缀表达式计算最终结果:
1)若为数字,则将其压入栈中;
2)若为运算符,则从栈中弹出两个数值进行计算,并将结果重新压入栈内;
最终,栈内仅剩一个数值,即为该表达式的计算结果;
4、题目存在一个特殊测试点:((((((-1)
1)可能出现左括号数量多于右括号的情况; 2)涉及负数的处理,在字符串转换为中序表达式的阶段需区分负号与减号的不同含义;
对此情况采用直接判断的方式处理:
if(9 =

全部评论 (0)

还没有任何评论哟~