数据结构栈问题求助

#include "stdio.h"
#define DT char
#define M 100
typedef struct
{
        DT data[M];
        int top;
}SEQSTACK;

SEQSTACK INI(){
        SEQSTACK S;
        S.top=0;
        return(S);
}

SEQSTACK PUS(SEQSTACK S,DT x){
        if(S.top==M-1)
                printf("栈满\n");
        else
                S.top++;
        S.data[S.top]=x;
        return (S);
}

SEQSTACK POP(SEQSTACK S){
        if(S.top==0)
                printf(" 空栈\n");
    else
        S.top--;
        return (S);
}

char GET(SEQSTACK S){
        if(S.top==0)
        {        printf("空栈\n");
                return '\0';
        }
        else
          return (S.data[S.top]);
}

char pre(char c){
        switch(c){
        case '#':
                c=0;break;
        case '+':
        case '-':
                c=1;break;
        case '*' :
        case '/':
                c=2;break;
        }
                return c;
}

int com(int x,int y,DT z)
{
        int rs;
        switch(z){
        case'-':
                rs=x-y;break;
        case'+':
                rs=x+y;break;
        case'*':
                rs=x*y;break;
        case'/':
                rs=x/y;break;
        }
        return rs;
}

int exp(DT q[20]){
        SEQSTACK NDS,OPS;
        char x,y,z;
        int result=0,i=0;
        NDS=INI();
        OPS=INI();
        OPS=PUS(OPS,'#');
        for(i=0;q[i]!='#';i++){
                if(q[i]<='9'&&q[i]>='0'){
                        NDS=PUS(NDS,q[i]-48);
                }
                else if(pre(q[i]<=pre(GET(OPS)))){
                        y=GET(NDS);
                        NDS=POP(NDS);
                        x=GET(NDS);
                        NDS=POP(NDS);
                        z=GET(OPS);
                        OPS=POP(OPS);
                        NDS=PUS(NDS,com(x,y,z));
                        OPS=PUS(OPS,q[i]);
                }
                else
                        OPS=PUS(OPS,q[i]);        
        }

while(GET(OPS)!='#'){
                   y=GET(NDS);
                        NDS=POP(NDS);
                        x=GET(NDS);
                        NDS=POP(NDS);
                        z=GET(OPS);
                        OPS=POP(OPS);
                        NDS=PUS(NDS,com(x,y,z));
        }
        result=GET(NDS);
        return (result);


}

        main()
        {
                char q[20];
                int result;
                printf("输入运算表达式\n");
                gets(q);
                result=exp(q);
                printf("%d",result);
        }
这个程序无法识别用户输入两位数值的预算。求助改动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值