上一篇博客讲了中缀,后缀表达式的求法,这里就记载一下前缀的。
可以参考这篇博客
nyoj ACM:前缀式计算( 堆栈的使用 或 递归 )
比如求 : + 2 * + 3 4 5
注意输入的之间都有空格
思路:
1. 用数组s接受前缀表达式,连同空格一起接收。
2. 然后将s全部压入堆栈A中
3. 每次从堆栈A中取出一个字符x。
- 如果是数字,那么就看A的下一个字符y是数字还是小数点还是空格。(因为可能有小数,这样会占用多个字符)
- 如果y是空格,直接将x压入B中;
- 如果y是小数点,那么再取小数点下一个数,三者合并就得到完整的小数,然后压入B中;
- 如果y 是数字,那么表明x和y同为某一小数的小数部分,且y是x的前一位,那么不断循环,直到找到小数点,再加上小数点后面的数字,3者合并,就得到一个完整的小数,然后压入堆栈B中
- 如果是空格,忽略掉即可。
- 如果是x运算符,那么M= B.POP() , N= B.POP() , 然后M,X,N运算,将结果压入B中。所以,总体来说,就是用这个方法后不用管优先级,遇到运算符就用