网站建设资讯

NEWS

网站建设资讯

销毁链表函数c语言版 链表删除c语言

C语言clear函数实现对链表的清空操作怎么写啊

链表的清空操作,就是要销毁掉除表头结点之外的所有结点。只要写个循环来销毁结点就可以,注意,要先记录当前结点的后继结点,然后再销毁当前结点。

公司主营业务:成都网站建设、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出双辽免费做网站回馈大家。

参考代码:

#define OK 1

#define ERROR 0

typedef int ElemType;

typedef struct SqList{

ElemType elem;

struct SqList *next;

}SqList;

int ClearList(SqList *list)

{

SqList *temp, *head = list;

if (list == NULL)

return ERROR;

list = list-next;

while (list != NULL)

{

temp = list-next;

free(list);

list = temp;

}

head-next = NULL;

return OK;

}

C语言中 销毁一个动态链表的函数 该怎么写啊??

到底是问链表还是数列呀?

可以这样写,传入的是头指针

void DeleteList(LIST* head)

{

LIST* tmp;

tmp = head;

while(tmp!=NULL)

{

head = tmp-next;

free(tmp);

tmp = head;

}

}

递归算菲数列的

long fi(int n)

{

if (n==1||n==2) return 1;

return fi(n-1)+fi(n-2);

}

其实用递归算菲波拉契数列很慢的,很快就栈溢出了。

C语言链表销毁的问题

你这个销毁函数本身没有问题,它是正确的,问题产生的根源在你的链表生成函数。

你的链表生成函数的入参是一个指针,作为形参,你能改变它指向的东西,但是不能改变形参本身体。也就是说,你在链表创建函数类生成了链表,但是出了这个函数,实参并没有指向你生成的这个链表。你的list仅仅是一个链表元素,你的程序里,它并不是动态生成的,而是一个局部变量,这时候你去free释放它,就会报错。

修改很简单,把创建函数参数改成指向指针的指针。如下:

#includestdio.h

#includestdlib.h

typedef struct LNode

{

int data;

struct LNode *next;

}LNode,*LinkList;

void CreatList_L(LinkList *L, int n);//参数改成LinkList 的指针,对链表元素来说,就是指针的指针

void DestoryList_L(LNode* L);//正确的,不需要修改

int main()

{

//LNode list;//这个可以不要

LNode *pList = NULL;//直接声明一个

指针就可以 ,调用CreatList_L之后,pList 就会指向你动态生成的链表了。

CreatList_L(pList,3); //传入指针地址

DestoryList_L(pList);

}

void CreatList_L(LinkList *L, int n) {

LNode *p,*r;

int i;

*L=(LinkList)malloc(sizeof(struct LNode)); //注意要对L解引用

if(*L==NULL) 

exit(1);

(*L)-next=NULL;

p=r=(*L);

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

p=(LinkList)malloc(sizeof(struct LNode));

scanf("%d",p-data);

p-next=NULL; 

r-next=p;

r=p;

}

for(p=(*L)-next;p!=NULL;p=p-next) 

printf("%-5d",p-data);

printf("\n");

}

void DestoryList_L(LNode* L)

{

LNode *p; int n=0;

while(L)

p=L; 

L=L-next;

free(p); 

n++;

}

printf("%d\n",n);

}

运行截图:

你的n输出有问题,应该是n-1


网页标题:销毁链表函数c语言版 链表删除c语言
本文地址:http://cdweb.net/article/ddjhpph.html