数据结构-顺序表(3)顺序表的建立、销毁、置空

来源:互联网 发布:mac ai抠图教程视频 编辑:程序博客网 时间:2024/06/08 11:10

----代码-------------------------------------------------------------------------------------------

int InitList(MyList *L){    L->data = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));//为线性表分配存储空间    if(!L->data) return 0;//分配失败    L->length = 0;//记录表长(空表)    L->listsize = LIST_INIT_SIZE;//记录已分配存储空间    return 1;//分配成功}int DestroyList(MyList *L){    if(!L->data) return 0;//线性表不存在    free(L->data);//释放存储空间    L->data = NULL;//初始化指针    return 1;}int ClearList(MyList *L){    if(!L->data) return 0;//线性表不存在    L->length;L->length = 0;//记录表长(空表)    return 1;//分配成功}

----分析与思考-------------------------------------------------------------------------------------------

顺序表使用了动态分配内存的方法,建立顺序表使用了malloc函数申请一块连续的内存空间用于存储数据;销毁顺序表则使用了free函数来释放内存;顺序表的置空则使用了一个偷懒的方法,简单地将顺序表的表长修改为0。


1.malloc与calloc

void * malloc(size_t size);

说明:malloc向系统申请分配指定size个字节的内存空间,返回首地址,返回类型是void *类型,即未确定类型的指针,可以强制转换为任何其他类型的指针。

使用方法: L->data = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));

(1)malloc函数返回的是void *类型,必须经过强制转换才可以赋值给某种类型的指针变量。

(2)函数的实参为LIST_INIT_SIZE * sizeof(ElemType),其中,sizeof(ElemType)用于指明每个数据的数据类型,LIST_INIT_SIZE为顺序表初始的大小,LIST_INIT_SIZE * sizeof(ElemType)就是所要分配的内存空间大小。


void * calloc(size_t n,size_t size);

说明:calloc向系统申请分配n个长度为size的连续空间,并自动初始化为0,返回首地址,返回类型是void *类型。

使用方法:L->data = (ElemType*)calloc (LIST_INIT_SIZE,sizeof(ElemTyoe);

(1)calloc函数返回的是void *类型,必须经过强制转换才可以赋值给某种类型的指针变量。

(2)函数的实参为LIST_INIT_SIZE和sizeof(ElemType),其中,sizeof(ElemType)用于指明每个成员字节长度,LIST_INIT_SIZE成员数目,LIST_INIT_SIZE * sizeof(ElemType)就是所要分配的内存空间大小。


主要区别:

ralloc会将分配的内存空间都初始化为0,而malloc不会,所分配的内存空间中存储着随机的垃圾数据。


2.free

void free(void * p);

说明:free将释放p指向的内存空间,被释放的空间通常被送入可用存储区域。

使用方法:free(L->data);free(L->data);

(1)函数的实参为L->data,即为释放的内存空间的首地址。

(2)函数并不会改变实参的值,故在使用完free函数后应该初始化指针,防止出现错误