单链表的实现

  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 }

 

posted @ 2015-10-31 17:20  弥猫  阅读(117)  评论(0编辑  收藏  举报