栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

后缀表达式求值(基于C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后缀表达式求值(基于C++)

后缀表达式求值

基本思想:

​ 建立一个操作数栈S。然后从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项操作数进行运算,再将运算的结果代替原栈顶的n项压入栈中。重复上面过程,如果后缀表达式读完且栈中只剩一个操作数,则该数就是运算结果;如果后缀表达式读完但是栈中操作数多于一个,则后缀表达式错误;如果栈中操作数只剩一个,但是后缀表达式还未读完且当前运算符为双元操作符,则后缀表达式同样错误。

测试样例:5 2 + 3 *

代码实现:

//计算
int calculate(int x,int y,char ch){
    switch(ch){
        case '+': return x + y;
        case '-': return x - y;
        case '*': return x * y;
        case '/':
            //遇到 /0的情况,出现错误,打印错误情况
            if(y == 0){
                cout << "Error: " << x << "/0" << endl;
                exit(0);
            }
            return x / y;
    }
}
//后缀表达式求值
bool CalcSuffixExpression(char arr[],int &res){
    stack stack;
    for (int i = 0; i < strlen(arr); ++i) {
        if (arr[i] >= '0' && arr[i] <= '9'){
            stack.push(arr[i] - '0');
        } else{
            int num_1,num_2,temp;
            num_2 = stack.top();
            stack.pop();
            num_1 = stack.top();
            stack.pop();
            temp = calculate(num_1,num_2,arr[i]);
            stack.push(temp);
        }
    }
    res = stack.top();
    return true;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号