后缀表达式的计算(机算)代码

后缀表达式的计算(机算)代码,第1张

思路

用栈实现后缀表达式的计算
①从左往右扫描下一个元素,直到处理完所有元素
②若扫描到 *** 作数则压入栈,并回到①;否则执行③
③若扫描到运算符,则d出两个栈顶元素,执行相应运算,运算结果压回栈顶,回到①

#include 
#include 

using namespace std;

#define MaxSize 10

typedef struct{
    char data[MaxSize];//静态数组存放栈中元素
    int top;//栈顶
} SqStack;

void InitStack(SqStack &S){
    S.top = -1;//初始化栈顶指针
    memset(S.data,'0', MaxSize);
}

bool StackEmpty(SqStack S){
    if(S.top==-1)//空栈
        return true;
    else
        return false;
}

bool Push(SqStack &S,char x){
    if (S.top==MaxSize-1)
        return false;
    S.top += 1;
    S.data[S.top] = x;
    return true;
}

bool Pop(SqStack &S,char &x){
    if(S.top==-1)
        return false;
    x = S.data[S.top];
    S.top -= 1;
    return true;
}
//判断字符类型
int StrType(char c){
    if(isdigit(c)){
        return 1;
    }
    if(c=='('||c==')'){
        return 2;
    }
    if(c=='+'||c=='*'||c=='-'||c=='/'){
        return 3;
    }
    return 0;
}

char Calculate(char numa,char numb,char oper){
    int inta = numb - 48;
    int intb = numa - 48;
    switch (oper)
    {
        case '+':
            return (inta + intb) + 48;
            break;
        case '-':
            return (inta - intb) + 48;
            break;
        case '*':
            return (inta * intb) + 48;
            break;
        case '/':
            return (inta / intb) + 48;
            break;
        default:
            return '0';
            break;
    }
}


char HzCalculate(string str){
    SqStack S;
    InitStack(S);

    for (size_t i = 0; i < str.size(); i++)
    {
        char cur = str.at(i);
        int opt = StrType(cur);

        if(opt==1){
            Push(S, cur);
            continue;
        }

        if(opt==3){
            char numa, numb;
            Pop(S,numa);
            Pop(S, numb);
            char result = Calculate(numa, numb, cur);
            Push(S, result);
        }
    }

    char result;
    Pop(S, result);
    return result;
}

int main(int argc, char const *argv[])
{
    //"1+2*(4-3)-6/3"
    char res = HzCalculate("1243-*+63/-");
    cout << res << endl;
    return 0;
}

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存