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

后缀表达式求值(基于C++),第1张

后缀表达式求值

基本思想:

​ 建立一个 *** 作数栈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<int> 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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/914616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存