单链表(有头结点)
# include <stdio.h>
# include <stdlib.h>
typedef struct LNode { int data; struct LNode * next;
} LNode, * LinkList;
bool InitList ( LinkList & L) { L= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( L== NULL ) return false; L-> next= NULL ; return true;
}
LinkList List_TailInsert ( LinkList & L) { L= ( LinkList) malloc ( sizeof ( LNode) ) ; LNode * s, * r= L; int x; scanf ( "%d" , & x) ; if ( x!= 999 ) { s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s= NULL ) return NULL ; s-> data= x; r-> next= s; r= s; scanf ( "%d" , & x) ; } r-> next= NULL ; return L; }
LinkList List_HeadInsert ( LinkList & L) { L= ( LinkList) malloc ( sizeof ( LNode) ) ; L-> next= NULL ; LNode * s; int x; scanf ( "%d" , & x) ; if ( x!= 999 ) { s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s= NULL ) return NULL ; s-> data= x; s-> next= L-> next; L-> next= s; scanf ( "%d" , & x) ; } return L;
}
bool InsertNextNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> data= e; s-> next= p-> next; p-> next= s; return true;
}
LNode * GetElem ( LinkList L, int i) { if ( i< 0 ) return NULL ; LNode * p; int j= 0 ; p= L; while ( p!= NULL && j< i) { p= p-> next; j++ ; } return p;
}
LNode * LocateElem ( LinkList L, int e) { LNode * p= L-> next; while ( p!= NULL && p-> data!= e) { p= p-> next; } return p; }
bool ListInsert ( LinkList & L, int i, int e) { if ( i< 1 ) return false;
LNode * p= GetElem ( L, i- 1 ) ;
return InsertNextNode ( p, e) ;
}
bool InsertPriorNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> next= p-> next; p-> next= s; s-> data= p-> data; p-> data= e; return true;
}
bool ListDelete ( LinkList & L, int i, int e) { if ( i< 1 ) return false; LNode * p; int j= 0 ; p= L; while ( p!= NULL && j< i- 1 ) { p= p-> next; j++ ; } if ( p== NULL ) return false; if ( p-> next== NULL ) return false; LNode * q= p-> next; e= q-> data; p-> next= q-> next; free ( q) ; return true;
}
bool DeleteNode ( LNode * p) { if ( p= NULL ) return false; LNode * q= p-> next; p-> data= p-> next-> data; p-> next= q-> next; free ( q) ; return true;
}
int main ( ) { }
单链表(无头结点)
# include <stdio.h>
# include <stdlib.h>
typedef struct LNode { int data; struct LNode * next;
} LNode, * LinkList;
bool InitList ( LinkList & L) { L= NULL ; return true;
}
LNode * GetElem ( LinkList L, int i) { if ( i< 0 ) return NULL ; LNode * p; int j= 1 ; p= L; while ( p!= NULL && j< i) { p= p-> next; j++ ; } return p;
}
LNode * LocateElem ( LinkList L, int e) { LNode * p= L; while ( p!= NULL && p-> data!= e) { p= p-> next; } return p;
}
bool InsertNextNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> data= e; s-> next= p-> next; p-> next= s; return true;
}
bool ListInsert ( LinkList & L, int i, int e) { if ( i< 1 ) return false; if ( i== 1 ) { LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; s-> data= e; s-> next= L; L= s; return true; }
LNode * p= GetElem ( L, i- 1 ) ;
return InsertNextNode ( L, e) ;
}
bool InsertPriorNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> next= p-> next; p-> next= s; s-> data= p-> data; p-> data= e; return true;
}
bool DeleteNode ( LNode * p) { if ( p= NULL ) return false; LNode * q= p-> next; p-> data= p-> next-> data; p-> next= q-> next; free ( q) ; return true;
}
int main ( ) { }
双链表
# include <stdio.h>
# include <stdlib.h>
typedef struct DNode { int data; struct DNode * prior, * next;
} DNode, * DLinklist;
bool InitDLinkList ( DLinklist & L) { L= ( DNode * ) malloc ( sizeof ( DNode) ) ; if ( L== NULL ) return false; L-> next= NULL ; L-> prior= NULL ; return true;
}
bool InsertNextDNode ( DNode * p, DNode * e) { if ( p== NULL || e== NULL ) return false; e-> next= p-> next; if ( p-> next!= NULL ) p-> next-> prior= e; e-> prior= p; p-> next= e; return true; }
bool DeleteNextDNode ( DNode * p) { if ( p== NULL ) return false; DNode * q= p-> next; if ( q== NULL ) return false; p-> next= q-> next; if ( q-> next!= NULL ) q-> next-> prior= p; free ( q) ; return true; } int main ( ) { }
循环单链表
# include <stdio.h>
# include <stdlib.h>
typedef struct LNode { int data; struct LNode * next;
} LNode, * LinkList;
bool InitList ( LinkList & L) { L= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( L== NULL ) return false; L-> next= L; return true;
}
LinkList List_TailInsert ( LinkList & L) { L= ( LinkList) malloc ( sizeof ( LNode) ) ; LNode * s, * r= L; int x; scanf ( "%d" , & x) ; if ( x!= 999 ) { s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s= NULL ) return NULL ; s-> data= x; r-> next= s; r= s; scanf ( "%d" , & x) ; } r-> next= NULL ; return L; }
LinkList List_HeadInsert ( LinkList & L) { L= ( LinkList) malloc ( sizeof ( LNode) ) ; L-> next= L; LNode * s; int x; scanf ( "%d" , & x) ; if ( x!= 999 ) { s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s= NULL ) return NULL ; s-> data= x; s-> next= L-> next; L-> next= s; scanf ( "%d" , & x) ; } return L;
}
bool InsertNextNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> data= e; s-> next= p-> next; p-> next= s; return true;
}
LNode * GetElem ( LinkList L, int i) { if ( i< 0 ) return NULL ; LNode * p; int j= 0 ; p= L; while ( p!= NULL && j< i) { p= p-> next; j++ ; } return p;
}
LNode * LocateElem ( LinkList L, int e) { LNode * p= L-> next; while ( p!= NULL && p-> data!= e) { p= p-> next; } return p; }
bool ListInsert ( LinkList & L, int i, int e) { if ( i< 1 ) return false;
LNode * p= GetElem ( L, i- 1 ) ;
return InsertNextNode ( p, e) ;
}
bool InsertPriorNode ( LNode * p, int e) { if ( p== NULL ) return false; LNode * s= ( LNode * ) malloc ( sizeof ( LNode) ) ; if ( s== NULL ) return false; s-> next= p-> next; p-> next= s; s-> data= p-> data; p-> data= e; return true;
}
bool ListDelete ( LinkList & L, int i, int e) { if ( i< 1 ) return false; LNode * p; int j= 0 ; p= L; while ( p!= NULL && j< i- 1 ) { p= p-> next; j++ ; } if ( p== NULL ) return false; if ( p-> next== L) return false; LNode * q= p-> next; e= q-> data; p-> next= q-> next; free ( q) ; return true;
}
bool DeleteNode ( LNode * p) { if ( p= NULL ) return false; LNode * q= p-> next; p-> data= p-> next-> data; p-> next= q-> next; free ( q) ; return true;
}
int main ( ) { }
循环双链表
# include <stdio.h>
# include <stdlib.h>
typedef struct DNode { int data; struct DNode * prior, * next;
} DNode, * DLinklist;
bool InitDLinkList ( DLinklist & L) { L= ( DNode * ) malloc ( sizeof ( DNode) ) ; if ( L== NULL ) return false; L-> next= L; L-> prior= L; return true;
}
bool InsertNextDNode ( DNode * p, DNode * e) { if ( p== NULL || e== NULL ) return false; e-> next= p-> next; p-> next-> prior= e; e-> prior= p; p-> next= e; return true; }
bool DeleteNextDNode ( DLinklist & L, DNode * p) { if ( p== NULL ) return false; DNode * q= p-> next; if ( q== L) return false; p-> next= q-> next; q-> next-> prior= p; free ( q) ; return true; } int main ( ) { }