练习了一下数据结构线性链表的链式结构,测试了一下函数还都通过了,最后整理了一下子,也不知道放到哪儿,应用暂时也没有地方,纯属练习大脑呢。放到这里吧,挺整齐的代码。以后也留一个纪念,也给参考的人触发点启发,谢谢关顾。
#include <stdio.h>
#include <alloc.h>
typedef struct linked_list
{
int data;
struct linked_list *next;
}linked_list;
/**
* the visit method.
*/
void visit(int data)
{
printf("%d\t",data);
}
/**
* compare element method.
*/
int compare(int first,int second)
{
return first==second?1:0;
}
/**
* init linked list
*/
void linked_list_init(linked_list **list)
{
(*list)=(linked_list*)malloc(sizeof(linked_list)*1);
(*list)->data=0;
(*list)->next=NULL;
}
/**
* destroy linked list.
*/
void linked_list_destroy(linked_list **list)
{
linked_list *free_node=(*list);
linked_list *move_node=free_node;
while(free_node)
{
move_node=free_node->next;
free(free_node);
free_node=move_node;
}
}
/**
* clear linked list.
*/
void linked_list_clear(linked_list **list)
{
linked_list *free_node=(*list)->next;
if(free_node)
{
linked_list_destroy(&free_node);
}
(*list)->data=0;
(*list)->next=NULL;
}
/**
* judge the linked list is empty.
*/
int linked_list_is_empty(linked_list *list)
{
return list->data==0?1:0;
}
/**
* get the linked list length.
*/
int linked_list_length(linked_list *list)
{
return list->data;
}
/**
* get index element to data.
*/
void linked_list_get_element(linked_list *list,int index,int *data)
{
int move_index=0;
linked_list *move_node=list->next;
if(index<0 || index>=list->data)
{
*data=-1;
return ;
}
while(move_index!=index)
{
move_node=move_node->next;
move_index++;
}
*data=move_node->data;
}
/**
* locate linked list element.
*/
int linked_list_locate_element(linked_list *list,int data,int (*ptr)(int first,int second))
{
int return_number=0;
linked_list *move_node=list->next;
while(move_node)
{
if(ptr(data,move_node->data))
{
return return_number;
}
move_node=move_node->next;
return_number++;
}
return -1;
}
/**
* get the prior element.
*/
void linked_list_prior_element(linked_list *list,int data,int *prior_data)
{
linked_list *move_node=list->next;
while(move_node->next)
{
if(move_node->next->data==data)
{
*prior_data=move_node->data;
return ;
}
move_node=move_node->next;
}
*prior_data=-1;
}
/**
* get linked list next element.
*/
void linked_list_next_element(linked_list *list,int data,int *next_data)
{
linked_list *move_node=list->next;
while(move_node)
{
if(move_node->data==data && move_node->next)
{
*next_data=move_node->next->data;
return ;
}
move_node=move_node->next;
}
*next_data=-1;
}
/**
* insert element to linked list.
*/
int linked_list_insert(linked_list *list,int index,int data)
{
int move_index=0;
linked_list *move_node=list->next;
linked_list *new_node=(linked_list*)malloc(sizeof(linked_list)*1);
if(index<0 || index>=list->data)
{
return 0;
}
while(move_index!=index)
{
move_node=move_node->next;
move_index++;
}
new_node->data=move_node->data;
move_node->data=data;
new_node->next=move_node->next;
move_node->next=new_node;
list->data++;
return 1;
}
/**
* insert element to the linked list end.
*/
void linked_list_insert_end(linked_list *list,int data)
{
linked_list *new_node=(linked_list*)malloc(sizeof(linked_list)*1);
linked_list *move_node=list;
while(move_node->next)
{
move_node=move_node->next;
}
new_node->data=data;
new_node->next=NULL;
move_node->next=new_node;
list->data++;
}
/**
* delete linked list element.
*/
int linked_list_delete(linked_list *list,int index,int *delete_data)
{
linked_list *prior_node=list;
linked_list *current_node=list->next;
int move_index=0;
if(index<0 || index>=list->data)
{
*delete_data=-1;
return 0;
}
while(move_index != index)
{
prior_node=prior_node->next;
current_node=current_node->next;
move_index++;
}
*delete_data=current_node->data;
prior_node->next=current_node->next;
free(current_node);
list->data--;
return 1;
}
/**
* traverse the linked list.
*/
void linked_list_traverse(linked_list *list,void (*ptr)(int print_data))
{
linked_list *move_node=list->next;
while(move_node)
{
ptr(move_node->data);
move_node=move_node->next;
}
}
int main()
{
int index=12;
linked_list *test_list=NULL;
int get_data=0;
int prior_data=0;
int next_data=0;
int delete_data=0;
linked_list_init(&test_list);
printf("the list length:%d\n",test_list->data);
for(;index<100;index++)
{
linked_list_insert_end(test_list,index*10);
}
linked_list_traverse(test_list,visit);
printf("\nthe list length:%d",test_list->data);
linked_list_get_element(test_list,87,&get_data);
printf("\nthe get data:%d",get_data);
printf("\nthe locate element:%d",linked_list_locate_element(test_list,990,compare));
linked_list_prior_element(test_list,130,&prior_data);
printf("\nthe prior element:%d",prior_data);
linked_list_next_element(test_list,980,&next_data);
printf("\nthe next element:%d",next_data);
linked_list_delete(test_list,87,&delete_data);
printf("\nthe delete element:%d\n",delete_data);
linked_list_insert(test_list,0,25);
linked_list_traverse(test_list,visit);
printf("\nthe list length:%d",test_list->data);
linked_list_destroy(&test_list);
test_list=NULL;
return 0;
}