C语言简单计算器原理——表达式求值(采用逆波兰表达式和栈结合)

表达式的求解的关键是将其转换成逆波兰表达式(即后缀表达式,如1+2*3它的逆波兰表达式为123*+),在后缀表达式中已经考虑了运算符的优先级,
没有括号,只有操作数和运算符。算术表达式转换成后缀表达式方法如下:
依次从键盘输入表达式的字符ch,对于每个ch:
(1)若ch为数字则直接将其放入后缀数组exp中并以#号标记数值串结束。
(2)若ch为"(",则直接将其压入字符栈op中。
(3)若ch为")",则将栈中"("以前的字符依次全部删除并将其放入后缀数组exp中,然后再将字符ch放入字符栈op中。
(4)若ch为"+"."-",则将栈中"("以前的运算符依次全部删除并将其放入后缀数组exp中,然后再将ch放入op栈中。
(5)若ch为"*"."/",则将栈顶连续的"*"."/"删除,并放入后缀数组exp中,然后将ch放入op栈中。
(6)若字符串str扫描完毕,则将栈中所有运算符删除并放入后缀数组exp,最后在后缀数组exp中便可得到后缀表达式。
在对后缀表达式求值时要用到一个数值栈st,在后缀数组exp中从头开始扫描,若是数字则将其放入数值栈中,
若遇到字符就进行两次退栈,并将运算结果再放入栈中,如此重复下去,最后当后缀数组扫描完后数值栈st的栈顶元素便是所要求的表达式的值。

  

posted @ 2011-09-02 15:26  zhongya  阅读(2525)  评论(0编辑  收藏  举报