链表

链表的声明头文件:

 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 }

 

posted on 2015-09-17 10:58  川川的小铁柱  阅读(109)  评论(0)    收藏  举报

导航