c语言释放线性表,线性表(顺序表)的销毁有关问题

线性表(顺序表)的销毁问题

各位,以下语句在做线性表(顺序表)销毁的时候, 执行DestoryList函数程序直接包括掉,不知是什么原因!

Status DestoryList(SqList *L)

{

if(L) //这里改成L->data也没有用

{

free(L); //这里改成L->data也没有用

L = NULL; //这里改成L->data也没有用

return OK;

}

else

return ERROR;

}

#include 

#include 

#define MAXSIZE 20/*存储空间初始分配量*/

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

typedef int Status;/*Status是函数的类型,其值是函数结果状态代码,如OK等*/

typedef int ElemType;/*ElemType类型根据实际情况而定,这里假设为int*/

typedef struct

{

ElemType data[MAXSIZE];/*数组存储数据元素,最大值为MAXSIZE*/

int length;/*线性表当前长度*/

}SqList;

/*操作结果:构造一个空的线性表*/

Status InitList(SqList *L)

{

L->length = 0;

return OK;

}

/*初始条件:线性表L已存在*/

/*操作结果:销毁线性表L*/

Status DestoryList(SqList *L)

{

if(L)

{

free(L);

L = NULL;

return OK;

}

else

return ERROR;

}

/*初始条件:线性表L已存在*/

/*操作结果:将L重置为空表*/

Status ClearList(SqList *L)

{

L->length = 0;

return OK;

}

/*初始条件:线性表L已存在*/

/*操作结果:若L为空表,则返回TRUE,否则返回FALSE*/

Status ListEmpty(SqList L)

{

if(L.length == 0)

return TRUE;

else

return FALSE;

}

/*初始条件:顺序线性表L已存在,1≤i≤ListLength(L)*/

/*操作结果:用e返回L中第i个数据元素的值*/

Status GetElem(SqList L,int i,ElemType *e)

{

if(L.length == 0 || i  L.length)

return ERROR;

*e = L.data[i-1];

return OK;

}

int main()

{

SqList L;

ElemType e;//元素值

Status s;//返回状态

int i;//元素位序

i = 10;

s = InitList(&L);

s=DestoryList(&L);

//s = GetElem(L,i,&e);

}

------解决方案--------------------

没有malloc,free必然出错啊。。。

------解决方案--------------------

那样的话 不需要你操作吧  自动销毁

------解决方案--------------------

malloc和free 一定要一一对应,有malloc的地方一定要在某个地方使用free进行释放

使用free之前确定你之前对这个地方进行过malloc操作

------解决方案--------------------

仅供参考

10051363.gif

http://pan.baidu.com/s/17yIcQ

------解决方案--------------------

引用:Quote: 引用:那样的话 不需要你操作吧  自动销毁

我也有这种考虑,但是数据结构的教材里的ADT里有这个函数,或者是对于这种不是动态分配方式产生的顺序表根本就不需要这个函数?

当时那个书我就看得晕乎乎的!有 没关系  空函数吧! 而且重点在于实现  你知道是怎么回事! 人是活的!

------解决方案--------------------

3楼正解。

如果楼主定义的是指针类型,那么就要用malloc动态分配内存,后面才能用free回收内存。

SqList *L = (SqList*)malloc(sizeof(SqList));

s = InitList(L);

printf("初始化后长度为:%d\n",L->length);

for (i=0;i

{

L->data[i]=i;

}

L->length=i;

for (i=0;ilength;i++)

{

printf("%d ",L->data[i]);

}

s=DestoryList(L);

在mian()函数中加了个测试,可以运行出正确结果。

------解决方案--------------------

仅供参考//带表头结点的单向链表

#include 

#include 

#include 

#include 

struct NODE {

int          data;

struct NODE *next;

} H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;

int i,j,k,n,t,m;

int main() {

srand(time(NULL));

//填写头节点数据

H.data=-1;

H.next=NULL;

head=&H;

//创建10个节点的单链表

p=head;

for (i=0;i<10;i++) {

q=(struct NODE *)malloc(sizeof(struct NODE));

if (NULL==q) return 1;

q->data=rand()%100;//填写0..99的随机值

q->next=NULL;

p->next=q;

p=q;

}

//输出整个单链表

s=head->next;

while (1) {

if (NULL==s) {

printf("\n");

break;

}

printf("%02d->",s->data);

s=s->next;

}

//将值为5的结点插入到单链表的第k个结点前

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值