1 #include <stdio.h> 2 #include <stdlib.h> 3 struct person{ 4 int age; 5 struct person *next; 6 }; 7 8 struct person *insert(struct person *head, int age) 9 { 10 struct person *tmp = malloc(sizeof(struct person)); 11 tmp -> age = age; 12 tmp -> next = head; 13 return tmp; 14 } 15 16 void show(struct person *h) 17 { 18 while(1){ 19 if(h == NULL){ 20 // printf("%d ",h->age); 21 break; 22 } 23 printf("age is %d ", h->age); 24 h = h->next; 25 } 26 } 27 28 struct person *insert_sec(struct person *h, int age) 29 { 30 struct person *tom = malloc(sizeof(struct person)); 31 tom->age = age; 32 struct person *tmp = h->next; 33 tom->next = tmp; 34 h->next = tom; 35 36 return h; 37 } 38 39 struct person *del(struct person *h, int age) 40 { 41 42 struct person *tmp = h; 43 while(1){ 44 if(h->next->age == 23) 45 { 46 h->next = h->next->next; 47 break; 48 } 49 h = h->next; 50 } 51 return tmp; 52 } 53 54 struct person *insert_tail(struct person *head, int age) 55 { 56 struct person *tmp = head; 57 struct person *tail = malloc(sizeof(struct person)); 58 59 while(1){ 60 if(head->next == NULL) 61 break; 62 head = head -> next; 63 } 64 head -> next = tail; 65 tail -> age = age; 66 tail -> next = NULL; 67 68 return tmp; 69 } 70 71 struct person *find_min(struct person *head) 72 { 73 struct person *min = head; 74 struct person *tmp = head; 75 76 while(tmp){ 77 if(tmp->next == NULL) 78 break; 79 if(min->age > tmp->age) 80 min = tmp; 81 tmp = tmp->next; 82 } 83 return min; 84 } 85 86 struct person * find_pro(struct person *head) 87 { 88 struct person *min_pro = head; 89 struct person *tmp = head; 90 91 if(min_pro->age != find_min(head)->age){ 92 while(1){ 93 if(min_pro->next->age == find_min(head)->age) 94 break; 95 min_pro = min_pro -> next; 96 } 97 } 98 return min_pro; 99 } 100 #if 0 101 struct person *sort(struct person *head) 102 { 103 struct person *tmp = head; 104 struct person *tmp1 = head; 105 int buffer = 0; 106 for(tmp=head; tmp->next; tmp=tmp->next){ 107 for(tmp1=tmp->next; tmp1; tmp1=tmp1->next){ 108 if(tmp->age > tmp1->age){ 109 buffer = tmp->age; 110 tmp->age = tmp1->age; 111 tmp1->age = buffer; 112 } 113 } 114 } 115 116 return head; 117 } 118 #endif 119 120 struct person *sort(struct person *head) 121 { 122 if((head == NULL) || (head->next == NULL)) 123 return head; 124 125 struct person *tmp = NULL; 126 struct person *min = NULL; 127 struct person *min_pre = NULL; 128 struct person *newhead = NULL; 129 struct person *oldhead = head; 130 131 while(oldhead) 132 { 133 //step 1:find min_pre 134 tmp = oldhead; 135 min = oldhead; 136 min_pre = NULL; 137 while(tmp->next != NULL){ 138 if(min->age > tmp->next->age){ 139 min_pre = tmp; 140 min = tmp->next; 141 } 142 tmp = tmp -> next; 143 } 144 145 //step 2:cat min 146 if(min == oldhead){ 147 oldhead = min->next; 148 min->next = NULL; 149 } 150 else{ 151 min_pre->next = min->next; 152 min->next = NULL; 153 } 154 //step 3:add newhead 155 if(newhead == NULL) 156 newhead = min; 157 else{ 158 min->next = newhead; 159 newhead = min; 160 } 161 } 162 } 163 int main() 164 { 165 struct person *tom = NULL; 166 struct person *min = NULL; 167 struct person *min_pro = NULL; 168 169 tom = insert(tom, 21); 170 tom = insert(tom, 23); 171 tom = insert(tom, 22); 172 tom = insert(tom, 24); 173 tom = insert(tom, 29); 174 tom = insert(tom, 21); 175 176 show(tom); 177 printf(" "); 178 tom = del(tom, 23); 179 show(tom); 180 181 printf(" "); 182 tom = insert_tail(tom, 26); 183 show(tom); 184 185 printf(" "); 186 min = find_min(tom); 187 printf("min is %d ", min->age); 188 189 min_pro = find_pro(tom); 190 printf("min_pro is %d ", min_pro->age); 191 192 tom = sort(tom); 193 show(tom); 194 }
多练习就好!