原地打转儿 发表于 2021-8-5 16:22:44

数据结构的后缀表达式计算,用栈实现,为什么运行部出结果

#include<stdio.h>
#include<stdlib.h>
#include <ctype.h>
#define maxsize 50   //define 后面没有;
typedef double elemtype;
typedef struct
{
        int top;
        elemtype data;
}stacklist;
initlist(stacklist *s)
{
        s->top=-1;       
        return 0;
}
push(stacklist *s,elemtype e)
{
        s->top++;
        s->data=e;
        return true;
}
pop(stacklist *s,elemtype *e)
{
        *e=s->data;   //忘记了*
        s->top--;
        return true;
}
main()
{
        stacklist s;
        initlist(&s);
        char c;
        char str;
        int i=0;
        double d,e;
        printf("input:\n");
        scanf("%c",&c);
        while(c!='#')
        {
                while(isdigit(c)|| c=='.')
                {
                        str=c;
                        str='\0';
                        scanf("%c",&c);
                        if(c==' ')   //少了一个=
                        {
                                i=0;
                                e=atof(str);
                                push(&s,e);       //这里debug时无法下一步,直接卡住
                                break;
                        }
                }
                switch(c)
                {
                        case '+':
                                pop(&s,&d);
                                pop(&s,&e);
                                push(&s,d+e);
                                break;
                        case '-':
                                pop(&s,&d);
                                pop(&s,&e);
                                push(&s,e-d);
                                break;
                        case '*':
                                pop(&s,&d);
                                pop(&s,&e);
                                push(&s,e*d);
                                break;
                        case '/':
                                pop(&s,&d);
                                pop(&s,&e);
                                if(d!=0)
                                {
                                        push(&s,e/d);
                                        break;
                                }
                                else
                                {
                                        printf("除数不能为0");
                                        return -1;
                                        break;
                                }
                        default:
                                break;
                }
        }
        pop(&s,&e);
        printf("%f\n",e);
}

Gacy 发表于 2021-8-5 16:46:10

我一看到数据结构就{:10_266:},上学期给我整无语了
页: [1]
查看完整版本: 数据结构的后缀表达式计算,用栈实现,为什么运行部出结果