天天看点

线性链表--链式链表实现(c语言)

练习了一下数据结构线性链表的链式结构,测试了一下函数还都通过了,最后整理了一下子,也不知道放到哪儿,应用暂时也没有地方,纯属练习大脑呢。放到这里吧,挺整齐的代码。以后也留一个纪念,也给参考的人触发点启发,谢谢关顾。

#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;
}
           

纪录自己的点滴学习,为实现梦想加油、呐喊!

继续阅读