链式存储结构-单向链表
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}linklist_t;
linklist_t* create_linklist()
{
linklist_t* list=malloc(sizeof(linklist_t));
list->next=NULL;
return list;
}
int isnull_linklist(linklist_t* list)
{
if(list==NULL)
return 0;
return list->next==NULL;
}
int insert_linklist(linklist_t* list,int data)
{
if(list==NULL)
return -1;
linklist_t* newnode=create_linklist();
newnode->data=data;
newnode->next=list->next;
list->next=newnode;
return 0;
}
int delete_linklist(linklist_t* list)
{
if(list==NULL||isnull_linklist(list))
return -1;
linklist_t* temp=list->next;
list->next=temp->next;
free(temp);
return 0;
}
linklist_t* locate_linklist(linklist_t* list,int data)
{
if(list==NULL||isnull_linklist(list))
return NULL;
while(list->next!=NULL)
{
if(list->next->data==data)
return list;
list=list->next;
}
return NULL;
}
int change_linklist(linklist_t* list,int data)
{
if(list==NULL||isnull_linklist(list))
return -1;
list->next->data=data;
return 0;
}
int print_linklist(linklist_t* list)
{
if(list==NULL||isnull_linklist(list))
return -1;
while(list->next!=NULL)
{
printf("%3d ",list->next->data);
list=list->next;
}
printf("\n");
return 0;
}
void re_print_linlist_digui(linklist_t* list)
{
if(list->next==NULL)
return ;
re_print_linlist_digui(list->next);
printf("%3d ",list->next->data);
return ;
}
int length_linklist(linklist_t* list)
{
if(list==NULL||isnull_linklist(list))
return 0;
int sum=0;
while(list->next!=NULL)
{
sum++;
list=list->next;
}
return sum;
}
int clear_list(linklist_t* list)
{
if(list==NULL||isnull_linklist(list))
return -1;
while(!isnull_linklist(list))
{
delete_linklist(list);
}
return 0;
}
int destroy_linklist(linklist_t* list)
{
if(list==NULL)
return -1;
if(!isnull_linklist(list))
clear_list(list);
free(list);
return 0;
}
int re_print_linlist_guohechaiqiao(linklist_t* list)
{
if(list==NULL||isnull_linklist(list))
return -1;
linklist_t* temp=create_linklist();
while(list->next!=NULL)
{
insert_linklist(temp,list->next->data);
list=list->next;
}
print_linklist(temp);
destroy_linklist(temp);
return 0;
}
int main(int argc, const char *argv[])
{
linklist_t* list=create_linklist();
int i;
for(i=1;i<=20;i++)
{
insert_linklist(list,i*10);
print_linklist(list);
}
change_linklist(locate_linklist(list,150),888);
print_linklist(list);
insert_linklist(locate_linklist(list,888),150);
print_linklist(list);
delete_linklist(locate_linklist(list,888));
print_linklist(list);
re_print_linlist_digui(list);
printf("\n");
re_print_linlist_guohechaiqiao(list);
printf("length_linklist %d\n",length_linklist(list));
clear_list(list);
printf("length_linklist %d\n",length_linklist(list));
destroy_linklist(list);
#if 0
for(i=1;i<=20;i++)
{
delete_linklist(list);
print_linklist(list);
}
#endif
return 0;
}