single_linklist.h
#ifndef __SINGLE_LINKLIST_H__
#define __SINGLE_LINKLIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node{
datatype data;
struct node *next;
}listnode,*linklist;
linklist create_linklist(void);
linklist create_n_linklist(void);
int delete_pos_linklist(linklist L,int pos);
void clear_linklist(linklist L);
int get_length_linklist(linklist L);
linklist get_list_pos_linklist(linklist L,int pos);
linklist get_list_locate_linklist(linklist L,datatype x);
int insert_head_linklist(linklist L,datatype x);
int insert_n_head_linklist(linklist L);
int insert_end_linklist(linklist L,datatype x);
int insert_n_end_linklist(linklist L);
int insert_pos_linklist(linklist L,datatype x,int pos);
int insert_order_linklist(linklist L,datatype x);
void reverse_linklist(linklist);
void sort_linklist(linklist L);
void show_linklist(linklist L);
#endif
single_linklist.c
#include "single_linklist.h"
linklist create_linklist(void)
{
linklist L;
if((L=(linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!\n");
return NULL;
}
L->data = 0;
L->next = NULL;
return L;
}
linklist create_n_linklist(void)
{
linklist L,H,r;
datatype x;
if((L=(linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!\n");
return NULL;
}
L->data = 0;
L->next = NULL;
r = L;
while(1)
{
printf("Please input a number(-1 exit :");
while(scanf("%d",&x) != 1)
{
printf("Please input a number(-1 exit :");
getchar();
}
if(x == -1)break;
if((H=(linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!\n");
return L;
}
H->data = x;
H->next = NULL;
r->next = H;
r=H;
}
return L;
}
int delete_pos_linklist(linklist L,int pos)
{
linklist r,p;
if(pos == 0)
{
r = L;
}
else
{
r = get_list_pos_linklist(L,pos-1);
}
if(r == NULL || r->next==NULL)
{
printf("argc is iavalid!\n");
return -1;
}
else
{
p = r->next;
r->next = p->next;
free(p);
p->next = NULL;
return 0;
}
}
void clear_linklist(linklist L)
{
while(get_length_linklist(L))
{
delete_pos_linklist(L,get_length_linklist(L)-1);
}
free(L);
L->next = NULL;
L = NULL;
}
int get_length_linklist(linklist L)
{
int i=0;
linklist r;
r = L;
while(r->next)
{
r = r->next;
i++;
}
return i++;
}
linklist get_list_pos_linklist(linklist L,int pos)
{
int i=-1;
linklist r;
if(L->next == NULL)
{
printf("list is NULL!\n");
return NULL;
}
if(pos<0 || pos>get_length_linklist(L)-1)
{
printf("input pos is invalid!");
return NULL;
}
r = L;
while(i<pos)
{
r = r->next;
i++;
}
return r;
}
linklist get_list_locate_linklist(linklist L,datatype x)
{
linklist r;
if(L->next == NULL)
{
printf("list is NULL!\n");
return NULL;
}
r = L->next;
while(r->data != x)
{
if(r->next == NULL)
{
printf("value is not in list!\n");
return NULL;
}
r = r->next;
}
return r;
}
int insert_head_linklist(linklist L,datatype x)
{
linklist H;
if((H=(linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory\n");
return -1;
}
H->data = x;
H->next = L->next;
L->next = H;
return 0;
}
int insert_n_head_linklist(linklist L)
{
datatype x;
while(1)
{
printf("Please input a number(-1 exit:");
while(scanf("%d",&x) != 1)
{
printf("Please input a number:(-1 exit");
getchar();
}
if(x == -1)break;
insert_head_linklist(L,x);
}
return 0;
}
int insert_end_linklist(linklist L,datatype x)
{
linklist r,H;
if((H = (linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!");
return -1;
}
r = L;
while(r->next)
{
r = r->next;
}
H->next = NULL;
H->data = x;
r->next = H;
return 0;
}
int insert_n_end_linklist(linklist L)
{
datatype x;
while(1)
{
printf("Please input a number(-1 exit:");
while(scanf("%d",&x) != 1)
{
printf("Please input a number:(-1 exit");
getchar();
}
if(x == -1)break;
insert_end_linklist(L,x);
}
return 0;
}
int insert_pos_linklist(linklist L,datatype x,int pos)
{
linklist K,r;
if(pos == 0)
{
r = L;
}
else
{
r = get_list_pos_linklist(L,pos-1);
}
if(r == NULL)
{
printf("argc is invalid!\n");
return -1;
}
else
{
if((K = (linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!");
return -1;
}
K->data = x;
K->next = r->next;
r->next = K;
}
return 0;
}
int insert_order_linklist(linklist L,datatype x)
{
linklist r,H;
if((H = (linklist)malloc(sizeof(listnode))) == NULL)
{
printf("malloc no memmory!\n");
return -1;
}
H->data = x;
r = L;
while(r->next && r->next->data<x)
{
r = r->next;
}
H->next = r->next;
r->next = H;
return 0;
}
void reverse_linklist(linklist L)
{
linklist r,p;
if(L->next == NULL)
{
printf("list is NULL!\n");
return ;
}
r = L->next;
L->next = NULL;
while(r)
{
p = r;
r = r->next;
p->next = L->next;
L->next = p;
}
return ;
}
void sort_linklist(linklist L)
{
linklist r,p,q;
if(L == NULL)
{
printf("list is NULL!\n");
return ;
}
r = L->next;
L->next = NULL;
while(r)
{
p = r;
r = r->next;
q = L;
while(q->next && q->next->data < p->data)
{
q = q->next;
}
p->next = q->next;
q->next = p;
}
}
void show_linklist(linklist L)
{
if(L->next == NULL)
{
printf("list is NULL!\n");
return ;
}
while(L->next)
{
printf("%d\t",L->next->data);
L = L->next;
}
puts("");
return ;
}
main.c
#include "single_linklist.h"
int main(int argc, const char *argv[])
{
int n=0;
linklist K;
puts("##########--homework one--##############");
K = create_linklist();
for(n=2;n<7;n++)
{
insert_end_linklist(K,n*2);
}
show_linklist(K);
while(1)
{
printf("Please input a number (-1 exit :");
while(scanf("%d",&n) != 1)
{
printf("Please input a number (-1 exit :");
getchar();
}
if(n == -1)break;
insert_order_linklist(K,n);
show_linklist(K);
}
puts("##########--homework two--##############");
reverse_linklist(K);
show_linklist(K);
clear_linklist(K);
show_linklist(K);
return 0;
}
运行结果