c语言顺序表的创建程序

不知道哪里出错了,崩溃~~求指教#include<stdio.h>#include<stdlib.h>#defineLIST_INIT_SIZE100#defineIcr... 不知道哪里出错了,崩溃~~求指教
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType; //用户自定义数据元素类型
typedef struct
{
ElemType *elem; //顺序表的基地址
int length; //顺序表的当前长度
int listsize; //预设空间容量
}SqList; //线性表的顺序存储结构

SqList InitList() //创建空的顺序表
{
SqList L;//定义顺序表L
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
{
printf("空间划分失败,程序退出\n");
exit(!0);
}
L.length=0;
L.listsize=LIST_INIT_SIZE;
return L;
}

SqList CreateList(SqList L) //创建顺序表(非空)
{
int number; //顺序表中元素的个数
int i; //循环变量
printf("请输入顺序表中元素的个数:");
scanf("%d",&number);
for(i=0;i<number;i++)
{
printf("输入第%d个数: ",i+1);
scanf("%d",&L.elem);
}//给顺序表中每个数据元素赋值
L.length=number; //当前顺序表的长度
return L;
}

void print(SqList L) //输出当前顺序表
{
int i;
for(i=0;i<L.length;i++)
printf("%-3d",L.elem);
printf("\n");
}

void main()
{
SqList L;
InitList();
CreateList(L);
print(L);
}
展开
 我来答
永远的弈心
推荐于2017-09-12
知道答主
回答量:8
采纳率:0%
帮助的人:16.8万
展开全部

/*
 *程序不足之处:1,main函数不应该为 void main
 *                        2,创建空的顺序表函数中 SqList L;//定义顺序表L L是局部变量,

                                 函数结束即销毁,应该用指针代替
 *                        3,SqList CreateList(SqList L)  //创建顺序表(非空)函数中: 

                                   scanf("%d",&L.elem); L里面的elem本来就是地址,

                                   没必要 再加&符号,且每次输入都一直放在首地址,

                                  没达到程序所要表达的意思
 *                        4,void print(SqList L)  //输出当前顺序表 函数中: 

                                 printf("%-3d",L.elem); 和上面是一样的道理
 *                        5,main函数中没有将申请的内存释放
 *现将程序稍作修改如下,望采纳
 */

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType;  //用户自定义数据元素类型

typedef struct

          ElemType *elem;  //顺序表的基地址 
          int length;  //顺序表的当前长度 
          int listsize;  //预设空间容量
}SqList;  //线性表的顺序存储结构

SqList* InitList()  //创建空的顺序表

           SqList* L = (SqList*)malloc(sizeof(SqList));//定义顺序表L
          if(!L)
         {
              printf("空间划分失败,程序退出\n");  
              return NULL;  
        }
       L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); 
        if(!L->elem)
       {  
             printf("空间划分失败,程序退出\n");  
             return NULL;  
      } 
       L->length=0; 
        L->listsize=LIST_INIT_SIZE; 
       return L;
}

int CreateList(SqList* L)  //创建顺序表(非空)

          int number;  //顺序表中元素的个数 
           int i;  //循环变量 
            printf("请输入顺序表中元素的个数:"); 
            scanf("%d",&number);
            if(number > LIST_INIT_SIZE)   //一定要判断输入的个数是否大于顺序表的最大长度
            {
                    printf("输入个数大于顺序表的长度\n");
                  return 0;
             }

          for(i=0;i<number;i++) 
        { 
               printf("输入第%d个数: ",i+1); 
               scanf("%d",L->elem+i);   //L->elem+i:每次的输入都保存在顺序表元素中的下一个地址,而不是一直放在元素的首地址
         }//给顺序表中每个数据元素赋值
        L->length=number;  //当前顺序表的长度 
       return 1;
}
void print(SqList* L)  //输出当前顺序表
{
          int i; 
          for(i=0;i<L->length;i++)
         {
               printf("%-3d",*(L->elem + i)); //L->elem+i:和输入是一个道理
         } 
          printf("\n");
}
int main()

           SqList* L = InitList();  //申请一个指向顺序表的指针,并对其初始化
           if(!L)      //判断申请是否成功
          {
                printf("初始化线性表失败\n");
                return 1;
           }
          if(!CreateList(L))   //判断创建顺序表是否成功
         {
               printf("创建顺序表失败\n");
             return 1;
         }
            print(L);     //打印顺序表
         free(L->elem);    //释放申请的顺序表元素的内存
        free(L);     //释放申请的顺序表内存
          return 0;
}

 

 

运行效果如图:

xoaxa
2013-11-15 · TA获得超过8608个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3448万
展开全部

/*

请输入顺序表中元素的个数:10

输入第1个数: 23

输入第2个数: 56

输入第3个数: 89

输入第4个数: 21

输入第5个数: 54

输入第6个数: 87

输入第7个数: 69

输入第8个数: 58

输入第9个数: 47

输入第10个数: 55

23 56 89 21 54 87 69 58 47 55

Press any key to continue

*/

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define Icreament 20
typedef int ElemType;  //用户自定义数据元素类型
typedef struct list{
ElemType *elem;  //顺序表的基地址
int length;  //顺序表的当前长度
int listsize;  //预设空间容量
}*SqList;  //线性表的顺序存储结构

SqList InitList() { //创建空的顺序表
SqList L;//定义顺序表L
L = (struct list *)malloc(sizeof(list)); // 这是必须的
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(L->elem == NULL) {
printf("空间划分失败,程序退出。\n");
exit(!0); 
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return L;
}

SqList CreateList(SqList L) { //创建顺序表(非空)
int number;  //顺序表中元素的个数
int i;  //循环变量
printf("请输入顺序表中元素的个数:");
scanf("%d",&number);
for(i = 0;i < number && i < L->listsize;i++) {
printf("输入第%d个数: ",i+1);
scanf("%d",&L->elem[i]);  
}//给顺序表中每个数据元素赋值
L->length = i;  //当前顺序表的长度
return L;
}

void print(SqList L) { //输出当前顺序表
int i;
for(i = 0;i < L->length;i++)
printf("%-3d",L->elem[i]);
printf("\n");
}

int main() {
SqList L = InitList();
CreateList(L);
print(L);
free(L->elem);
free(L);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式