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 }
没跑的原因有2个
1:你在遍历这个List的时候用了i小于L的length,但是你从来没设置到Length,所以这个遍历直接就过了,所以你应该在读完Length之后,也就是scanf("%d", &length);之后再加一句L.length = length;
2:这样做你也紧紧可以遍历了,但是你看看的你的遍历函数却又在先读后输出。我不知道你的目的是什么,如果你只是想看新开辟的length长度的线性表中的数据到底是什么,你可以把TraverseList方法里的读取那一行注释了,程序自然跑的通,你可以看当前刚刚开辟的空间里的数据是什么。但是如果你要先输入,再遍历读取的话,我想你是应该再写一个输入数据的函数的。