链表
链表的声明头文件:
1 #ifndef _List_h 2 3 struct Node; 4 typedef struct Node *PtrToNode; 5 typedef PtrToNode List; 6 typedef PtrToNode Position; 7 8 List MakeEmpty( List L ); 9 int IsEmpty( List L ); 10 int IsLast( Position P, List L ); 11 Position Find( ElementType X, List L ); 12 void Delete( ElementType X, List L ); 13 Position FindPrevious( ElementType X, List L ); 14 void Insert( ElementType X, List L, Position P ); 15 void DeleteList( List L ); 16 Position Header( List L ); 17 Position Advance ( Position P ); 18 ElementType Retrieve( Position P ); 19 20 #endif // _List_h
链表的实现:
1 #include "list.h" 2 #include<malloc.h> 3 #include<stdlib.h> 4 5 List MakeEmpty(List L) { 6 L = malloc(sizeof(struct Node)); 7 L->Element = 0; 8 L->Next = NULL; 9 return L; 10 } 11 12 int IsEmpty(List L) { 13 return L->Next == NULL; 14 } 15 16 int IsLast(Positon P, List L) { 17 return P->Next == NULL; 18 } 19 20 Position Find(ElementType X, List L) { 21 Position P; 22 P = L->Next; 23 while(P != NULL && P->Elemnt != X) 24 P = P->Next; 25 return P; 26 } 27 28 void Delete(ElementType X, List L) { 29 Position P, TmpCell; 30 P = FindPrevious(X, L); 31 if( !IsLast(P, L) ) { 32 TmpCell = P->Next; 33 P->Next = TmpCell->Next; 34 free(TmpCell); 35 } 36 } 37 38 Position FindPrevious(ElementType X, List L) { 39 Position P; 40 41 P = L; 42 while(P->Next != NULL && P->Next->Element != X) { 43 P = P->Next; 44 } 45 return P; 46 } 47 48 void Insert(ElementType X, List L, Position P) { 49 Position TmpCell; 50 TmpCell = malloc(sizeof(struct Node)); 51 if(TmpCell == NULL) 52 FatalError("Out of space!"); 53 TmpCell->Element = X; 54 TmpCell->Next = P->Next; 55 P->Next = TmpCell; 56 } 57 58 void DeleteList(List L) { 59 Position P, TmpCell; 60 P = L->Next; 61 L->Next = NULL; 62 while( P != NULL ) { 63 TmpCell = P; 64 P = P->Next; 65 free(TmpCell); 66 TmpCell = NULL; 67 } 68 } 69 70 Position Header(List L) { 71 return L; 72 } 73 74 Position First(List L) { 75 if(L->Next != NULL) 76 return L->Next; 77 } 78 79 position Advance(Position P) { 80 if( P != NULL ) { 81 return P->Next; 82 } 83 } 84 85 ElementType Retrieve(Position P) { 86 if(P != NULL) 87 return P->Element; 88 }
浙公网安备 33010602011771号