蓝桥杯 ALGO-156 表达式计算

蓝桥杯 ALGO-156 表达式计算

题意:输入一个表达式,求其表达式的结果输入的是一个中缀表达式,所以我们需要将其先转化为后缀式,然后使用后缀式求其结果,有点类似于数据结构课上的那个表达式求值。

思路:

一.将中缀表达式转化为后缀表达式,首先判断是数字还是运算符,

①如果是数字的话,我们需要判读是不是最后一个字符或者下一个字符不是数字的话,将字符和‘#’压入后缀栈,否则将该字符压入后缀栈。

②如果是运算符的话,又分成三种情况:

1.该字符为‘(’或则字符栈为空或则该字符的优先级大于其字符栈栈顶字符的优先级,则将该字符压入字符栈;

2.如果该字符是‘)’,则将字符栈内‘(’后的字符加入后缀栈,然后将该字符从字符栈内弹出;

3.该字符的优先级小于等于字符栈栈顶字符的优先级,将字符栈内小于该字符的优先级的字符加入后缀栈,然后弹出。

最后将字符栈内剩余的字符全部加入后缀栈,然后在将后缀栈的字符全部加到ch字符数组中。

二.计算值,

①如果是数字,第一种情况:如果后面一个字符如果是#,表示是一个数,可以直接压入栈内,第二种情况后面第一个字符也是数字,则先计算了之后保存,直到遇到了‘#’符,然后将数字压入数字栈内;

②如果是一个运算符,则需要判断一下栈内是不是为空了,因为可能出现-4+3这样的情况出现,-是一个负数的标识而不是一个二位运算符,而导致没有数弹出与4运算,所以弹出前先判断一下。把弹出的两个数字进行相应的运算,把运算的结果压入栈内,最后栈内只剩下了最后的运算结果了。直接返回即可。

注意保存数字的栈一定要使用数字栈,否则第二个通不过

参考大佬的博客:https://blog.****.net/reidsc/article/details/54669433