复习九:栈的应用——表达式求值

方法一:【严蔚敏版】

OperandType EvaluateExpression(){
    //算术表达式求值的算符优先算法。设OPTR为运算符栈,OPND为操作数栈
    //OP为运算符集合
    InitStack(OPTR); Push(OPTR,'#');    //“#”为运算符栈的栈低元素
    InitStack(OPND); c=getchar();    //输入表达式,表达式起始符为“#”
    while(c!= '#' || GetTop(OPTR)!='#'){
        if(!In(c,OP)){   Push(OPND,c);c=getchar();}    //当前字符c不是运算符则进操作数栈
            //In(c,OP)  判断字符c是否是运算符
        else
            switch(Precede(GetTop(OPTR),c)){   
             //Precede是判断运算符栈的栈顶运算符与读入的运算符直接的优先级关系的函数
            case'<':    //栈顶元素优先级低
                    Push(OPTR,c);c=getchar();    //将高优先级的运算符压入运算符栈
                    break;
            case'=':    //当前运算符是‘)’,且运算符栈顶元素为‘(’
                    Pop(OPTR,x);  c=getchar();    //脱括号并接收下一字符
                    break;
            case'>':    //  栈顶元素优先级高
                    Pop(OPTR,theta);    //将运算符栈栈顶元素输出,并赋值给theta
                    Pop(OPND,b);  Pop(OPND,a);    //将操作数栈前两个元素输出
                    Push(OPND,Operate(a,theta,b));    //将运算结果压回操作数栈
                    //由于栈的后进先出,所以后输出的操作数在运算符前
                    //Operate为进行二元运算的函数
                    break;
            }//switch
       }//while
    return GetTop(OPND);
}

方法二:【王道版】

中缀表达式求值_yyy_zxc的博客-CSDN博客

后缀表达式运算(操作数均为个位数)_yyy_zxc的博客-CSDN博客

中缀表达式转为后缀表达式_yyy_zxc的博客-CSDN博客

比较运算符优先级_yyy_zxc的博客-CSDN博客_运算符优先级的比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值