各位极客,我创建了单链表算法,但我没有看到它正常工作:
#include <stdio.h>
#include <stdlib.h>
/*
*
*/
typedef struct _data_konfirm
{
char *id;
char *buff;
int v;
struct _data_konfirm *next;
}data_konfirm;
void data_add(data_konfirm **data,char *id,char *buff,int v)
{
data_konfirm *tmp = (data_konfirm*)malloc(sizeof(data_konfirm));
tmp->id = strdup(id);
tmp->buff = strdup(buff);
tmp->v = v;
tmp->next = *data;
*data = tmp;
}
void data_destroy(data_konfirm **data)
{
data_konfirm *b = *data;
free(b->id);
free(b->buff);
free(b);
}
void data_del(data_konfirm **data,char *id)
{
data_konfirm *tmp = *data, *b = NULL;
if(!strcmp(tmp->id,id))
{
b = tmp;
tmp = tmp->next;
data_destroy(&b);
return;
}
while(tmp->next->next != NULL)
{
if(!strcmp(tmp->next->id,id))
{
b = tmp->next;
tmp->next = b->next;
data_destroy(&b);
return;
}
tmp = tmp->next;
}
if(!strcmp(tmp->next->id,id))
{
b = tmp->next;
data_destroy(&b);
tmp->next = NULL;
return;
}
}
void inform_show_all(data_konfirm **data)
{
data_konfirm *tmp = *data;
int i = 0;
while(tmp)
{
printf("id -> %s\n",tmp->id);
printf("buff -> %s\n",tmp->buff);
i++;
tmp = tmp->next;
}
printf("jumlah data : %d\n",i);
}
int main(int argc, char** argv) {
data_konfirm *a = NULL;
data_add(&a,"1","silit",2);
data_del(&a,"1");
data_add(&a,"2","wwww",1);
data_add(&a,"3","zzz",2);
data_add(&a,"4","huaaa",2);
data_del(&a,"3");
inform_show_all(&a);
return (EXIT_SUCCESS);
}
如果我运行这些代码,循环将永远不会结束,那么有什么问题吗?
预先感谢...