# include <stdio.h>
# include <stdlib.h>
# include "linkedList.h"
List * create ( )
{
List * l = ( List * ) malloc ( sizeof ( List) ) ;
l-> first = NULL ;
l-> last = NULL ;
l-> n = 0 ;
return l;
}
void headInsert ( List * l, ElemType x)
{
lNode * p = ( lNode * ) malloc ( sizeof ( lNode) ) ;
p-> data = x;
p-> next = NULL ;
if ( l-> first == NULL )
{
l-> first = p;
l-> last = p;
}
else
{
p-> next = l-> first;
l-> first = p;
}
l-> n++ ;
}
void tailInsert ( List * l, ElemType x)
{
lNode * p = ( lNode * ) malloc ( sizeof ( lNode) ) ;
p-> data = x;
p-> next = NULL ;
if ( l-> first == NULL )
{
l-> first = l-> last = p;
}
else
{
l-> last-> next = p;
l-> last = p;
}
l-> n++ ;
}
void insert ( List * l, ElemType x)
{
lNode * p = ( lNode * ) malloc ( sizeof ( lNode) ) ;
p-> data = x;
p-> next = NULL ;
if ( l-> n == 0 )
{
l-> last = l-> first = p;
l-> n ++ ;
return ;
}
lNode * q = l-> first;
lNode * r = NULL ;
while ( q)
{
if ( q-> data > x)
{
break ;
}
r = q;
q = q-> next;
}
if ( q == l-> first)
{
p-> next = l-> first;
l-> first = p;
}
else if ( q == NULL )
{
l-> last-> next = p;
l-> last = p;
}
else
{
r-> next = p;
p-> next = q;
}
l-> n ++ ;
}
void printfLkList ( List * l)
{
lNode * p = l-> first;
while ( p)
{
printf ( "%d " , * ( int * ) ( p-> data) ) ;
p = p-> next;
}
printf ( "\n" ) ;
}
void printfLkList1 ( List * l)
{
lNode * p = l-> first;
while ( p)
{
printf ( "%lf " , * ( double * ) ( p-> data) ) ;
p = p-> next;
}
printf ( "\n" ) ;
}
void clearLkList ( List * l)
{
lNode * p = l-> first;
while ( p)
{
l-> first = p-> next;
free ( p-> data) ;
p-> next = NULL ;
free ( p) ;
p = l-> first;
}
l-> first = l-> last = NULL ;
l-> n = 0 ;
}
void destroyLkList ( List * l)
{
lNode * p = l-> first;
while ( p)
{
l-> first = p-> next;
free ( p-> data) ;
p-> next = NULL ;
free ( p) ;
p = l-> first;
}
l-> first = l-> last = NULL ;
l-> n = 0 ;
free ( l) ;
}
void delete ( List * l, ElemType x)
{
lNode * p = l-> first;
lNode * r = NULL ;
while ( p)
{
if ( p-> data == x)
{
break ;
}
r = p;
p = p-> next;
}
if ( p == NULL )
{
return ;
}
else
{
if ( p == l-> first)
{
l-> first = l-> first-> next;
p-> next = NULL ;
free ( p) ;
}
else if ( p-> next == NULL )
{
r-> next = NULL ;
free ( p) ;
l-> last = r;
}
else
{
r-> next = p-> next;
p-> next = NULL ;
free ( p) ;
}
l-> n -- ;
}
}
int find ( List * l, ElemType x)
{
lNode * p = l-> first;
while ( p)
{
if ( p-> data == x)
{
return 1 ;
}
p = p-> next;
}
return 0 ;
}
# include <stdio.h>
# include <stdlib.h>
# include "linkedList.h"
void test01 ( )
{
List * l = create ( ) ;
int * p;
p = ( int * ) malloc ( sizeof ( int ) ) ;
* p = 10 ;
headInsert ( l, ( void * ) p) ;
p = ( int * ) malloc ( sizeof ( int ) ) ;
* p = 60 ;
headInsert ( l, ( void * ) p) ;
p = ( int * ) malloc ( sizeof ( int ) ) ;
* p = 80 ;
headInsert ( l, ( void * ) p) ;
p = ( int * ) malloc ( sizeof ( int ) ) ;
* p = 50 ;
headInsert ( l, ( void * ) p) ;
printfLkList ( l) ;
}
void test02 ( )
{
List * l = create ( ) ;
double * p;
p = ( double * ) malloc ( sizeof ( double ) ) ;
* p = 1.1 ;
headInsert ( l, ( void * ) p) ;
p = ( double * ) malloc ( sizeof ( double ) ) ;
* p = 2.3 ;
headInsert ( l, ( void * ) p) ;
p = ( double * ) malloc ( sizeof ( double ) ) ;
* p = 4.5 ;
headInsert ( l, ( void * ) p) ;
p = ( double * ) malloc ( sizeof ( double ) ) ;
* p = 8.8 ;
headInsert ( l, ( void * ) p) ;
printfLkList1 ( l) ;
}
int main ( )
{
test01 ( ) ;
test02 ( ) ;
return 0 ;
}
# ifndef __LINKEDLIST_H__
# define __LINKEDLIST_H__
typedef void * ElemType;
struct linkedListNode
{
ElemType data;
struct linkedListNode * next;
} ;
typedef struct linkedListNode lNode;
struct linkedList
{
lNode* first;
lNode* last;
int n;
} ;
typedef struct linkedList List;
List * create ( ) ;
void headInsert ( List * l, ElemType x) ;
void tailInsert ( List * l, ElemType x) ;
void insert ( List * l, ElemType x) ;
void printfLkList ( List * l) ;
void clearLkList ( List * l) ;
void destroyLkList ( List * l) ;
void delete ( List * l, ElemType x) ;
int find ( List * l, ElemType x) ;
void printfLkList1 ( List * l) ;
# endif