#ifndef LINK__LIST_H
#define LINK__LIST_H
//注意:本链表的位置编号从0开始,头节点不算在节点里面
typedef void* link_list;
typedef void* link_list_node;
link_list create_link_list();
void destroy_link_list(link_list list);
void clear_link_list(link_list list);
int size_link_list(link_list list);
void* get_link_list(link_list list, int pos);
int insert_link_list(link_list list, void * data, int pos);
int remove_by_position_link_list(link_list list, int pos);
#endif // !LINK__LIST_H
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "link_list.h"
//注意:本链表的位置编号从0开始,头节点不算在节点里面
typedef struct tag_inner_link_list_node {
struct tag_inner_link_list_node *next;
}inner_link_list_node;
typedef struct {
inner_link_list_node header;
int size;
}inner_link_list;
link_list create_link_list()
{
inner_link_list * inner_list = (inner_link_list *)malloc(sizeof(inner_link_list));
if (inner_list == NULL)
{
return NULL;
}
memset(inner_list, 0, sizeof(inner_link_list));
inner_list->header.next = NULL;
inner_list->size = 0;
return inner_list;
}
void destroy_link_list(link_list list)
{
inner_link_list * inner_list = NULL;
if (list != NULL)
{
inner_list = (inner_link_list *)list;
free(inner_list);
}
return;
}
void clear_link_list(link_list list)
{
inner_link_list * inner_list = NULL;
if (list == NULL)
{
return;
}
inner_list = (inner_link_list *)list;
inner_list->header.next = NULL;
inner_list->size = 0;
return;
}
int size_link_list(link_list list)
{
inner_link_list * inner_list = NULL;
if (list == NULL)
{
return -1;
}
inner_list = (inner_link_list *)list;
return inner_list->size;
}
void* get_link_list(link_list list, int pos)
{
int i = 0;
inner_link_list * inner_list = NULL;
inner_link_list_node * current = NULL;
if (list == NULL)
{
return NULL;
}
inner_list = (inner_link_list *)list;
if ((pos < 0) || (pos > inner_list->size))
{
return NULL;
}
current = &(inner_list->header);
while ((i <= pos) && (current != NULL))
{
current = current->next;
i++;
}
return current;
}
int insert_link_list(link_list list, void *data, int pos)
{
int i = 0;
inner_link_list * inner_list = NULL;
inner_link_list_node * pre = NULL;
if ((list == NULL)||(data==NULL))
{
return -1;
}
inner_list = (inner_link_list *)list;
if ((pos < 0) || (pos > inner_list->size))
{
return -1;
}
pre = &(inner_list->header);
while (i < pos)
{
pre = pre->next;
i++;
}
((inner_link_list_node *)data)->next = pre->next;
pre->next = data;
inner_list->size++;
return 0;
}
int remove_by_position_link_list(link_list list, int pos)
{
int i = 0;
inner_link_list * inner_list = NULL;
inner_link_list_node * pre = NULL;
if (list == NULL)
{
return -1;
}
inner_list = (inner_link_list *)list;
if ((pos < 0) || (pos >= inner_list->size))
{
return -1;
}
pre = &(inner_list->header);
while ((i < pos) && (pre != NULL))
{
pre = pre->next;
i++;
}
pre->next = pre->next->next;
inner_list->size--;
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include "link_list.h"
typedef struct _teacher
{
link_list_node node;
int age;
char name[64];
}teacher;
int main(int argc, char ** argv)
{
teacher t1, t2, t3, t4, t5;
link_list tlist = create_link_list();
int i = 0;
int j = 0;
int length = 0;
teacher * temp = NULL;
t1.age = 31;
t2.age = 32;
t3.age = 33;
t4.age = 34;
t5.age = 35;
insert_link_list(tlist, &t1, 0);
insert_link_list(tlist, &t2, 0);
insert_link_list(tlist, &t3, 0);
insert_link_list(tlist, &t4, 0);
insert_link_list(tlist, &t5, 0);
length = size_link_list(tlist);
printf("the length of tlsit : %d\n", length);
while (i < length)
{
temp = (teacher *)get_link_list(tlist, i);
printf("temp->age: %d\t", temp->age);
i++;
}
while (j < length)
{
temp = (teacher *)get_link_list(tlist, size_link_list(tlist)-1);
remove_by_position_link_list(tlist, size_link_list(tlist) - 1);
printf("delete: %dth,age:%d\n", j, temp->age);
j++;
}
clear_link_list(tlist);
length = size_link_list(tlist);
printf("the length of tlsit : %d\n", length);
destroy_link_list(tlist);
length = size_link_list(tlist);
printf("链表销毁后,the length of tlsit : %d\n", length);
system("pause");
return 0;
}