dear_tl 2021-10-12 20:00 采纳率: 50%
浏览 34

数据结构C语言 栈的基本函数 照着书抄但是编译错误

问题:为什么照着严老的数据结构书上给的函数抄,但是一编译就错误?!5555~我确保和书上一样!从学线性表就遇到这样的问题了,照着书上的函数打,但是根本没法运行。怎么改啊?问了同学也不会!谢谢!
我不是定义了base的吗,为什么会说没有base?而且看网上好多人的代码都是用的top=1,pos=-1,这样比书上的好吗?
报错

img

附上代码:
这道题是符号配对 后面的不知道对不对 反正开头就错了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STACK_INIT_SIZE 100;//存储空间初始分配量
#define STACKINCREAMENT 10;//增量 
typedef char SElemType,Status;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stacksize;
}Sqstack;
Status InitStack(Sqstack &S){
    //构造空栈 
    S.base=(SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType));
    if(!S.base) exit(OVERFLOW);//存储分配失败 
    S.top=S.base;
    S.stacksize=STAKC_INIT_SIZE;
    return 1;
}
Status GetTop(Sqstack &S,SElemType e){
    //若栈不空,则用e返回S的栈顶元素,并返回1
    if(S.top==S.base) return  0;
    e=*(S.top-1);
    return 1;
}
Status Push(Sqstack &S,SElemType e){
    //入栈
     if(S.top-S.base>=S.stacksize){
         //栈满,加空间
         S.base=(SElemType *)realloc (S.base,
         (S.stacksize+STACKINCREAMENT)*sizeof(SElemType));
         if(!S.base) exit(OVERFLOW);//空间分配失败
         S.top=S.base+S.stacksize;
         S.stacksize+=STACKINCREMENT; 
     }
     *S.top++=e;
     return 1;
}
Status Pop(Sqstack &S){
    //出栈
    if(S.top==S.base) return 0;
    S.top--;
    return 0; 
}


int main()
{
    Sqstack S;
    InitStack(S);
    char a[1000],c;
    int i=0, n, flag=0;
    while(1){
        gets(a);
        if(a[0]=='.') break;
        n=strlen(a);
        for(i=0;i<n;i++)
        {
            if(a[i]=='('||a[i]=='['||a[i]=='{')
            {Push(S, a[i]);}
            else if(a[i]=='/'&&a[i+1]=='*')
            {
                Push(S,a[i]);
                Push(S,a[i++]);
            }
            else if(a[i]==')')
            {
                if(S.base==S.top)//空 
                {
                    printf("NO\n");
                    printf("?-)");
                    flag=1;
                    break;
                }
                else{
                    c=Pop(S);
                    if(c!='(')
                    {
                        if(c=='*')
                        {
                        printf("NO\n");printf("/*-?");
                        flag=0;
                        break;
                        }
                        else {
                        printf("NO\n");printf("%c-?",c);flag=1;
                        break;
                        }
                    }
                }
            }
            else if(a[i]==']')
            {
                if(S.base==S.top)
                {
                    printf("NO\n");
                    printf("?-]");
                    flag=1;break;
                }
                else{
                    c=Pop(S);
                    if(c!='[')
                    {
                        if(c=='*')
                        {
                            printf("NO\n");
                            printf("/*-?");
                            flag=1;break;
                        }
                        else {
                            printf("NO\n");
                            printf("%c-?",c);
                            flag=1;break;
                        }
                    }
                }
            }
            else if(a[i]=='}')
            {
                if(S.base==S.top)
                {
                    printf("NO\n");
                    printf("?-}");
                    flag=1;break;
                }
                else {
                    c=Pop(S);
                    if(c!='{')
                    {
                            if(c=='*')
                        {
                            printf("NO\n");
                            printf("/*-?");
                            flag=1;break;
                        }
                        else {
                            printf("NO\n");
                            printf("%c-?",c);
                            flag=1;break;
                        }
                    }
                }
            }
            else if(a[i]=='*'&&a[i+1]=='/')
            {
                if(S.base==S.top)
                {
                    printf("NO\n");
                    printf("?-*/");
                    flag=1;break;
                }
                else {
                    c=Pop(S);
                    if(c!='*')
                    {
                            if(c=='*')
                        {
                            printf("NO\n");
                            printf("/*-?");
                            flag=1;break;
                        }
                        else {
                            c=Pop(S);
                            i++;
                        }
                    }
                }
            }
        }
        if(flag==0)
        {
            if(S.base==S.top)
            printf("YES\n");
            else {
                c=Pop(S);
                if (c == '*')
                   {
                    printf("NO\n");
                    printf("/*-?");
                    flag = 1;
                   }
               else
               {
            printf("NO\n");
            printf("%c-?", c);
            no = 1;
               }
          }
    }
        return 0;
}

  • 写回答

5条回答 默认 最新

  • 快乐鹦鹉 2021-10-12 20:06
    关注

    C里面不能用引用。改为指针类型吧

    评论

报告相同问题?

问题事件

  • 创建了问题 10月12日

悬赏问题

  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 打开powerpont询问是否安装officeplus不小心点了不安装以后再也不提示是否安装了
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 用大厂网站防红自己网站
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询