C语言实现中缀表达式求值算法,算法3-4:表达式求值 (C++代码)

解题思路:

问题描述:

输入由整型分量和操作符组成的中缀表达式,输出其后缀表达式和运算的结果。整型分量:十进制数。操作符:( , ) , + , - , * , / 。

如输入3*(5-8/2)+7,输出 3 5 8 2 / - * 7 +,结果是10;

输入3-(1/4+7)*3 ,输出 3 1 4 / 7 + 3 * -,结果是 -18.75;

输入3*4/5*(5-7)+4,输出 3 4 * 5 / 5 7 - * 4 +,结果是-0.8。

注意:输入的运算分量为十进制数,输出可能是小数。

问题分析:

中缀表达式难以直接求值,要通过转化为其后缀表达式计算。转化和求值过程都需要借助STL的STACK来实现。

转化:

1)顺序扫描中缀表达式,

当遇到一个左括号时立即将其压栈;

当遇到对应的右括号时,将栈中的操作符弹出并输出,直到遇到左括号。最后再弹出左括号(但不输出);

当遇到一个分量时,立即输出;

当遇到一个操作符时,将它与栈顶操作符比较:

<1>如果它比栈顶的操作符优先级高,或者它是左括号后的第一个操作符,则将其压入栈;

<2>否则(低或相等),将栈顶操作符弹出并输出;

<3>继续比较,如果它比新的栈顶操作符的优先级高,跳到 2),否则,重复<

你可能感兴趣的:(C语言实现中缀表达式求值算法)