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++;
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算