单链表的实现
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct node 5 { 6 int num; 7 struct node* next; 8 }node; 9 10 node *head = NULL; 11 12 node *make_node(int data) 13 { 14 node *p = (node *)malloc(sizeof(node)); 15 16 if(p == NULL) 17 { 18 return NULL; 19 } 20 else 21 { 22 p -> num = data; 23 p -> next = NULL; 24 } 25 return p; 26 } 27 28 void insert_node_head(node *p) 29 { 30 p -> next = head; 31 head = p; 32 } 33 34 void insert_node_tail(node *p) 35 { 36 node *p1 = head; 37 node *end = NULL; 38 if(head == NULL) 39 { 40 head = p; 41 } 42 else 43 { 44 while(p1 -> next != NULL) 45 { 46 p1 = p1 -> next; 47 } 48 p1 -> next = p; 49 p1 = p; 50 p -> next = NULL; 51 } 52 } 53 54 void free_node(node *p) 55 { 56 free(p); 57 } 58 59 void traverse() 60 { 61 node *p = head; 62 if( p == NULL) 63 { 64 printf("no num/n"); 65 } 66 while(p != NULL) 67 { 68 printf("%d ",p -> num); 69 p = p -> next; 70 } 71 printf("\n"); 72 } 73 74 node *find(int n) 75 { 76 node *p = head; 77 while(p != NULL) 78 { 79 if(n == p -> num) 80 { 81 return p; 82 } 83 p = p -> next; 84 } 85 return NULL; 86 } 87 88 89 void rm_node(node *p) 90 { 91 if(p == head) 92 { 93 head = head -> next; 94 p -> next = NULL; 95 return; 96 } 97 else 98 { 99 node *pre = head; 100 while(pre != NULL) 101 { 102 if(pre -> next == p) 103 { 104 pre -> next = p -> next ; 105 p -> next = NULL; 106 return ; 107 } 108 pre = pre -> next; 109 } 110 } 111 } 112 113 void destory() 114 { 115 node *p = head ; 116 while(head != NULL) 117 { 118 head = head -> next; 119 free_node(p); 120 p = head; 121 } 122 } 123 int main() 124 { 125 node *p = make_node(1); 126 insert_node_tail(p); 127 128 p = make_node(3); 129 insert_node_tail(p); 130 131 p = make_node(5); 132 insert_node_tail(p); 133 134 p = make_node(7); 135 insert_node_tail(p); 136 137 traverse(); 138 139 int a = 3; 140 p = find(3); 141 if(p == NULL) 142 { 143 printf("can not find num3\n"); 144 } 145 else 146 { 147 printf("%d\n",p -> num); 148 } 149 destory(); 150 traverse(); 151 }