称9+(3-1)*5+10/2这样的表达式为中缀表达式,称9 3 1 - 3 * + 10 2 / +这样的形式为后缀(逆波兰 RPN)表达式(数字在前运算符在后)。
一、将中缀表达式转为后缀表达式:
1、遍历中缀表达式中的数字和符号
①对于数字:直接输出(即直接成为后缀表达式的一部分);
②对于符号:
1`左括号:进栈;
2`符号:与栈顶符号进行优先级比较
· 栈顶符号优先级低则进栈;
· 栈顶符号优先级不低则将栈顶符号弹出并输出之后 再将此符号压入栈中;
3`右括号:将栈顶符号弹出并输出,知道匹配左括号(左括号也弹出);
2、遍历结束:
将栈中的所有符号弹出并输出。
算法框架:
transform(exp)
{
创建栈S;
i=0;
while(exp[i] != '\0')
{
if(exp[i]为数字)
{
output(exp[i]);
}
else if(exp[i]为符号)
{