为避免表中留有脏数据,首先要对表进行初始化,使之后创建表内数据时,不会受到影响。
#include<stdio.h>
#define MaxSize 10 /*此处创建的是静态链表,此句默认了表的最大数据长度10,后面对此表的长度最大长度不能进行修改;若是动态链表则还可以通过创建指针进行修改*/
tppedef struct{int data[MaxSize]; /*静态链表采用数组存储并调用,所以用*/
int length;}sqList; /*data[MaxSize]*/
void InitList(sqList &L){for(int i=0; i<=MaxSize; i++)
L.data[i]=0;
L.length=0;} /*此处在遍历顺序表,并赋值0,清理表中可能存留的脏数据,且此时表的长度为0;*/
int main(){sqList L;
InitList(L);
return 0;}
与此相对比的动态数据表:
#include<stdio.h>
#define InitSize 10 /*此处于静态链表一样,需调用#define InitList10来默认表的长度,不同是的,动态链表可以修改表长;*/
typedef struct {int *data; /*动态链表采用指针*/
int MaxSize;
int length;}sqList;
void InitList(sqList &L){ L.data=(int *)malloc(InitSize*sizeof(int));
L.MaxSize =InitSize; /*清除脏数据无需像静态链表*/
L.length =0;} /* 一样,完整的遍历数组,只需将L.length =0;*/
void IncreaseList(sqList &L, int len){ int *p=L.data;
/*有malloc就必有free; L.data=(int *)malloc((L.length +len)*sizeof(int));
动态链表增加链表长度时, for(int i=0; i<L.length; i++)
需要再创建一个指针,将*p指向 L.data[i]=p[i];
*data,之后改变L.data的长度, L.MaxSize=L.MaxSize +len;
再进行遍历,并将指针p的值一一传回L.data*/ free(p);}
int main(){sqList L;
InitList(L);
IncreaseList(L,5);
return 0;}
以上是静态链表和动态俩表在初始化表和增加表长的区别。