首页新闻找找看学习计划

帮忙看下哪里有问题,没输出,顺序表

0
[待解决问题]
 1 #include <stdio.h>  
 2 #include <stdlib.h>  
 3 #define Max_Size 1000 //线性表存储空间的初始分配量  
 4 #define add_Size 100 //线性表存储空间的分配增量   
 5 typedef int DataType;//元素类型  
 6 typedef struct List 
 7 {  
 8     DataType *data;//线性表首地址  
 9     int length;//当前的长度  
10     int size;//当前分配的存储容量 
11 }SeqList;  
12   
13 void againMalloc(struct List *L)//空间不够时重新分配空间的函数  
14 {  
15     DataType *newbase=(DataType*)realloc(L->data,(L->size+add_Size)*sizeof(DataType));  ;//分配一个临时基址  
16     if(!newbase){ 
17         printf("空间分配失败!");
18         exit(1);
19     }  
20     L->data=newbase;//使List指向新线性表空间 
21     L->size+=add_Size;//把线性表空间大小修改为新的长度
22     return;
23 }  
24   
25 //初始化一个空的线性表  
26 void InitList(struct List *L)  
27 {  
28     L->length=0;//初始表为空表  
29     L->data=(DataType*)malloc(Max_Size*sizeof(DataType));  
30     if(!L->data){
31         printf("空间分配失败!");
32         exit(1); 
33     }  
34     L->size=Max_Size;//初始表的存储容量,为Max_Size个DataType单位  
35     return;  
36 }
37   
38 //遍历顺序表  
39 void TraverseList(struct List *L)  
40 {  
41     int i;  
42     for(i=0;i<L->length;i++)  
43     {    
44         scanf("%d ",&L->data[i]);
45         printf("%d ",L->data[i]);  
46     }  
47     printf("\n");  
48     return;  
49 }  
50 
51 int main(void)  
52 {  
53     struct List L;  
54     InitList(&L);
55     int length;
56     printf("请输入线性表的长度length:");
57     scanf("%d",&length);
58     printf("创建的顺序表L:");
59     TraverseList(&L);
60     return 0;  
61 }  
Silence!的主页 Silence! | 菜鸟二级 | 园豆:202
提问于:2017-04-20 14:06
< >
分享
所有回答(1)
0

没跑的原因有2个

1:你在遍历这个List的时候用了i小于L的length,但是你从来没设置到Length,所以这个遍历直接就过了,所以你应该在读完Length之后,也就是scanf("%d", &length);之后再加一句L.length = length;

2:这样做你也紧紧可以遍历了,但是你看看的你的遍历函数却又在先读后输出。我不知道你的目的是什么,如果你只是想看新开辟的length长度的线性表中的数据到底是什么,你可以把TraverseList方法里的读取那一行注释了,程序自然跑的通,你可以看当前刚刚开辟的空间里的数据是什么。但是如果你要先输入,再遍历读取的话,我想你是应该再写一个输入数据的函数的。

ぁ丶泛滥的尐青春つ | 园豆:199 (初学一级) | 2017-05-06 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册