函数声明头文件:function.h
#define true 1
#define false 0
typedef int datatype;
typedef struct l_node
{
datatype data;
struct l_node *next;
}l_node, *link_list;
int get_elem(link_list HEAD, int i, datatype *e);
int list_insert_posision(link_list HEAD, int i,datatype e);
int list_delete_position(link_list HEAD, int i, datatype *e);
void create_list(link_list HEAD, int n);
void merge_list(link_list HEAD_A, link_list HEAD_B, link_list HEAD_C);
int list_empty(link_list HEAD);
int list_length(link_list HEAD);
link_list list_locate(link_list HEAD, int k);
void list_print(link_list HEAD);
int list_locate_pos(link_list HEAD, datatype k);
void list_destory(link_list HEAD);
函数实现文件:implementation.c
#include<stdio.h>
#include<stdlib.h>
#include"function.h"
int get_elem(link_list HEAD, int i, datatype *e)
{
link_list p = NULL;
p = HEAD -> next;
int j = 1;
while(p && j < i )
{
p = p -> next;
j += 1;
}
if (!p || j > i)
{
return false;
}
*e = p -> data;
return true;
}
int list_insert_posision(link_list HEAD,int i, datatype e)
{
link_list p = NULL;
p = HEAD;
int j = 0;
while( p && (j < i - 1) )
{
p = p -> next;
j += 1;
}
if ( !p || (j > i - 1) )
{
return false;
}
link_list new_node = (link_list) malloc(sizeof(l_node));
new_node -> data = e;
new_node -> next = p -> next;
p -> next = new_node;
return true;
}
int list_delete_position(link_list HEAD, int i, datatype *e)
{
link_list p = NULL;
p = HEAD;
int j = 0;
while( p -> next && j < i - 1)
{
p = p -> next;
j += 1;
}
if ( !(p -> next) || j > i - 1 )
{
return false;
}
*e = p -> next -> data;
link_list q = p -> next;
p -> next = q -> next;
free(q);
return true;
}
void create_list(link_list HEAD, int n)
{
int i = 0;
HEAD -> next = NULL;
for (i = 0; i < n; i++)
{
link_list p = (link_list) malloc(sizeof(l_node));
scanf("%d",&(p -> data));
p -> next = HEAD -> next;
HEAD -> next = p;
}
}
void merge_list(link_list HEAD_A, link_list HEAD_B, link_list HEAD_C)
{
HEAD_C = HEAD_A;
link_list pa, pb, pc;
pa = HEAD_A -> next;
pb = HEAD_B -> next;
pc = HEAD_C;
while(pa && pb)
{
if(pa -> data <= pb -> data)
{
pc -> next = pa;
pc = pa;
pa = pa -> next;
}
else
{
pc -> next = pb;
pc = pb;
pb = pb -> next;
}
}
pc -> next = pa?pa:pb;
free(HEAD_B);
}
int list_empty(link_list HEAD)
{
if (HEAD -> next == NULL)
return true;
else
return false;
}
int list_length(link_list HEAD)
{
int count = 0;
link_list p = HEAD -> next;
while(p)
{
count += 1;
p = p -> next;
}
return count;
}
link_list list_locate(link_list HEAD, int k)
{
link_list p = HEAD -> next;
int i = 1;
while(p && i < k)
{
p = p -> next;
i += 1;
}
if (p && i == k)
{
return p;
} return NULL;
}
void list_print(link_list HEAD)
{
printf("打印单链表\n");
link_list p = HEAD -> next;
while(p)
{
printf("%d\n", p -> data);
p = p -> next;
}
}
int list_locate_pos(link_list HEAD, datatype k)
{
link_list p = HEAD -> next;
int i = 1;
while(p)
{
if(p -> data == k)
return i;
p = p -> next;
i += 1;
}
return 0;
}
void list_destory(link_list HEAD)
{
while(HEAD)
{
link_list p = HEAD;
HEAD = HEAD -> next;
free(p);
}
}