weixin_63226529 2022-09-23 23:29 采纳率: 75%
浏览 175
已结题

C:\Users\86182\Desktop\栈.cpp(10) : fatal error C1004: unexpected end of file found

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图

#include<stdio.h>
#include<stdlib.h>

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -2
#define OK 1
#define ERROR 0

typedef int SElemType data;

typedef struct
{
SElemType *base;
SELemType *top;
int stacksize;
SElemType data[MAXSIZE];
}SqStack;

void CreateStack_S(SqStack&s)//先创建一个栈,然后才能进行各种基本操作
{
S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}

void Push(SqStack&S,SElemType e)//入栈
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}

void GetTop(SqStack S,SElemType&e)//获得栈顶元素
{
if(S.top==S.base)
return ERROR;
e=*(S.top-1);
return OK;
}

void StackTraverse(SqStack S)//栈的遍历
{
int a=0;
while(a<=S.top)
visit(S.data[i++]);
printf("\n");
return OK;
}

void Pop(SqStack&S,SElemType&e)//删除栈顶元素
{
if(S.top==S.base)return ERROR;
e=*--S.top;
return OK;
}

void ClearStack(SqStack&S)//清空栈
{
S.top=S.base;
return OK;
}

void DestoryStack(SqStack&s)//栈的销毁
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}

int main()
{
int n,e,i;
SqStack S;
CreateStack_S(S);
printf("请输入元素个数\n");
scanf("%d",&n);
printf("请输入你的元素\n");
for(i=0;i<n;i++)
{
scanf("%d",&e);
Push(S e);
}
Get(S e);
printf("栈顶元素为:%d",e);
Pop(S e);
StackTraverse(S);
ClearStack(S);
DestoryStack(S);
return 0;
}

运行结果及报错内容

C:\Users\86182\Desktop\栈.cpp(10) : error C2146: syntax error : missing ';' before identifier 'data'
C:\Users\86182\Desktop\栈.cpp(10) : fatal error C1004: unexpected end of file found

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-24 10:29
    关注

    修改如下,见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    
    #define STACK_INIT_SIZE 100
    #define STACKINCREMENT 10
    #define OVERFLOW -2
    #define OK 1
    #define ERROR 0
    
    typedef int SElemType;//data;
    typedef struct
    {
        SElemType *base;
        SElemType *top; //SELemType
        int stacksize;
                        //SElemType data[MAXSIZE];
    }SqStack;
    
    void CreateStack_S(SqStack &S)//先创建一个栈,然后才能进行各种基本操作
    {                             //s
        S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
        if(!S.base)
           exit(OVERFLOW);
        S.top = S.base;
        S.stacksize = STACK_INIT_SIZE;
        return;     //OK;
    }
    
    void Push(SqStack &S,SElemType e)//入栈
    {
        if(S.top-S.base >= S.stacksize){
            S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
            if(!S.base)
                exit(OVERFLOW);
            S.top = S.base + S.stacksize;
            S.stacksize += STACKINCREMENT;
        }
        *S.top++ = e;
        return;  // OK;
    }
    
    void GetTop(SqStack S,SElemType &e)//获得栈顶元素
    {
        if(S.top==S.base)
            return;  // ERROR;
        e = *(S.top-1);
        return;     // OK;
    }
    
    void StackTraverse(SqStack S)//栈的遍历
    {
        SqStack tmp; //int a=0;
        tmp.top = S.top;
        while(tmp.top > S.base)
             printf("%d ",*--tmp.top);
            //visit(S.data[a++]);
        printf("\n");
        return; // OK;
    }
    
    void Pop(SqStack &S,SElemType &e)//删除栈顶元素
    {
        if(S.top == S.base){
            e = -999;
            return; // ERROR;
        }
        e = *--S.top;
        return;  // OK;
    }
    
    void ClearStack(SqStack &S)//清空栈
    {
        S.top = S.base;
        return; // OK;
    }
    
    void DestoryStack(SqStack &S)//栈的销毁 //s
    {
        free(S.base);
        S.base=NULL;
        S.top=NULL;
        S.stacksize=0;
        return; // OK;
    }
    
    int main()
    {
        int n,e,i;
        SqStack S;
        CreateStack_S(S);
        printf("请输入元素个数\n");
        scanf("%d",&n);
        printf("请输入你的元素\n");
        for(i=0;i<n;i++)
        {
            scanf("%d",&e);
            Push(S,e);
        }
    
        StackTraverse(S);//栈的遍历
    
        GetTop(S,e);
        printf("栈顶元素为:%d\n",e);
    
        Pop(S,e);
        printf("出栈元素为:%d\n",e);
    
        Pop(S,e);
        printf("出栈元素为:%d\n",e);
    
        Pop(S,e);
        printf("出栈元素为:%d\n",e);
    
        Pop(S,e);
        printf("出栈元素为:%d\n",e);
    
        ClearStack(S);
        DestoryStack(S);
       
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月23日

悬赏问题

  • ¥15 Error in check.length("fill") : 'gpar'成分'fill'的长度不能为零
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导