利用顺序栈计算后缀表达式(逆波兰表达式)

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MaxSize 50
struct SeqStack{
    double data[MaxSize];
    int top;
};
bool InitStack(SeqStack *S)
{
    S->top=-1;
    return true;
}
bool Push(SeqStack *S,double x)
{
    S->top++;
    S->data[S->top]=x;
    return true;
}
bool Pop(SeqStack *S,double &s)
{
    s=S->data[S->top];
    S->top--;
    return true;
}

void DoOperator(SeqStack *S,char ch)
{
    double left,right,value;
    Pop(S,right);
    Pop(S,left);
    switch(ch)
    {
        case '+':value=left+right;Push(S,value);break;
        case '-':value=left-right;Push(S,value);break;
        case '*':value=left*right;Push(S,value);break;
        case '/':
            if(right==0) cout<<"错误"<<endl;
               else value=left/right;Push(S,value);break;
    }
    return ;
}
int main()
{
    SeqStack S;
    InitStack(&S);
    double operand,result;
    char ch;
    while(cin>>ch) {
        if(isdigit(ch))
        {cin.putback(ch);                //是操作数则将字符放回输入流(可能要输入的是12,2.5等等大于10或者非整数,用double变量保存
        cin>>operand;                     //重新读取操作数
        Push(&S,operand);                   //操作数压栈
        }
        else DoOperator(&S,ch);
    }
    Pop(&S,result);
    cout<<result<<endl;
    return 0;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值