Alyson Yao 2019-04-18 23:38 采纳率: 0%
浏览 446

数据结构顺序栈代码,老是报错,求大神帮忙看一下哪里有问题。

/*
实验内容:
1.利用数组建立并初始化一个顺序栈,并将此栈中各元素的值依次输出;
2.当栈不满时将一个新元素入栈,并依次输出此时栈中各元素的值。
3.当栈不空时将栈顶元素出栈,并输出此时栈中各元素的值。

实验要求:
栈的最大空间为10个元素单元,栈中已有部分元素,栈中元素值的类型为字符型。
要求新入栈的元素可以从键盘输入。
当操作不合理或不能完成时,程序应能处理并输出相应信息。
带星号的第3项实验内容为选作内容。
*/

#include<stdio.h>
#include<stdlib.h> //需要的头文件
typedef char StackData;
typedef struct 
{   
    StackData *base;    
    StackData *top; 
    int stacksize;
} SeqStack;  //说明顺序栈的结构体变量类型

void main()
{
 Create_Stack(S);
 printf("顺序栈中已有的元素值为:\n");
 Print_Stack(S);
 printf("\n请输入要入栈的新元素值:\n");
 scanf("%c",&x);
 Push(S,x); //将新元素x入栈
 printf("新元素入栈后栈中元素的值为:\n");
 Print_Stack(S);
}

void Create_Stack(S)//初始化建立顺序栈
{
  S.base=(StackData*)malloc(10*sizeof(StackData));
  S.top=S.base;
  S.stacksize=10;
  char a[10]={'a','b','c','d','e','f','g','h'};
  int i;
  for(i=0;i<=9;i++)
  {
    *S.top=a[i];
    S.top++;
  }
}


void Print_Stack(S)//依次输出栈中各元素的值
{
  StackNode *p;
  p=S.base;
  while(p<S.top)
  {
    printf("%c ",*p);
    p++;
  }
}


void Push(SeqStack S,StackData x) //将新元素x入栈
{
    if(StackFull(S))
    {
      S.base=(StackData*)realloc(S.base,(S.stacksize+10)*sizeof(StackData));
      if(!S.base) exit(overflow);//追加存储空间失败
      S.top=S.base+S.stacksize;
      S.stacksize+=10;
    }
    *S.top=x;
    S.top++;
}
  • 写回答

2条回答 默认 最新

  • 浅草夏洛洛 2019-04-20 21:59
    关注

    我不知道你是不是没写完还是其它什么原因,里面有很多东西都还没有写。
    主要是你的函数放在main后面,前面要加声明还有就是一些变量没有声明。我只改了你的语法问题,Stackfull()还没有写。
    下面是代码

    /*
    实验内容:
    1.利用数组建立并初始化一个顺序栈,并将此栈中各元素的值依次输出;
    2.当栈不满时将一个新元素入栈,并依次输出此时栈中各元素的值。
    3.当栈不空时将栈顶元素出栈,并输出此时栈中各元素的值。
    
    实验要求:
    栈的最大空间为10个元素单元,栈中已有部分元素,栈中元素值的类型为字符型。
    要求新入栈的元素可以从键盘输入。
    当操作不合理或不能完成时,程序应能处理并输出相应信息。
    带星号的第3项实验内容为选作内容。
    */
    
    #include<stdio.h>
    #include<stdlib.h> //需要的头文件
    #define overflow -1
    typedef char StackData;
    typedef struct
    {
        StackData *base;
        StackData *top;
        int stacksize;
    } SeqStack;  //说明顺序栈的结构体变量类型
    void Create_Stack(SeqStack S);   //初始化建立顺序栈
    void Print_Stack(SeqStack S);   //依次输出栈中各元素的值
    void Push(SeqStack S,StackData x);   //将新元素x入栈
    int StackFull(SeqStack S);
    
    int main()
    {
     char x;
     SeqStack S;
     Create_Stack(S);
     printf("顺序栈中已有的元素值为:\n");
     Print_Stack(S);
     printf("\n请输入要入栈的新元素值:\n");
     scanf("%c",&x);
     Push(S,x); //将新元素x入栈
     printf("新元素入栈后栈中元素的值为:\n");
     Print_Stack(S);
     return 0;
    }
    
    void Create_Stack(SeqStack S)//初始化建立顺序栈
    {
      S.base=(StackData*)malloc(10*sizeof(StackData));
      S.top=S.base;
      S.stacksize=10;
      char a[10]={'a','b','c','d','e','f','g','h'};
      int i;
      for(i=0;i<=9;i++)
      {
        *S.top=a[i];
        S.top++;
      }
    }
    
    
    void Print_Stack(SeqStack S)//依次输出栈中各元素的值
    {
      StackData *p;
      p=S.base;
      while(p<S.top)
      {
        printf("%c ",*p);
        p++;
      }
    }
    
    
    void Push(SeqStack S,StackData x) //将新元素x入栈
    {
        if(StackFull(S))
        {
          S.base=(StackData*)realloc(S.base,(S.stacksize+10)*sizeof(StackData));
          if(!S.base) exit(overflow);//追加存储空间失败
          S.top=S.base+S.stacksize;
          S.stacksize+=10;
        }
        *S.top=x;
        S.top++;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能