1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 typedef struct node 6 { 7 char name[11]; 8 char birthday[9]; 9 char phone[18]; 10 struct node *next; 11 } NODE, *LINK; 12 void AddNewNode(LINK head, int n); 13 void PrintList(LINK head); 14 void cleanList(LINK head); 15 int main(void) 16 { 17 int n; 18 LINK head; 19 20 head = (LINK)malloc(sizeof(NODE)); 21 head->next = NULL; 22 23 scanf("%d", &n); 24 AddNewNode(head, n); 25 PrintList(head); 26 cleanList(head); 27 28 return 0; 29 } 30 void AddNewNode(LINK head, int n) 31 { 32 LINK tail = head; 33 LINK p, q, newNode; 34 35 for (int i = 0; i < n; i++) 36 { 37 newNode = (LINK)malloc(sizeof(NODE)); 38 scanf("%s %s %s", newNode->name, newNode->birthday, newNode->phone); 39 newNode->next = NULL; 40 if (i == 0) 41 { 42 tail->next = newNode; 43 tail = newNode; 44 } 45 else 46 { 47 q = head; 48 p = head->next; 49 while (p != NULL) 50 { 51 if (strcmp(newNode->birthday, p->birthday) < 0) 52 { 53 q->next = newNode; 54 newNode->next = p; 55 break; 56 } 57 else 58 { 59 q = p; 60 p = p->next; 61 } 62 } 63 if (p == NULL) 64 { 65 q->next = newNode; 66 } 67 } 68 } 69 } 70 void PrintList(LINK head) 71 { 72 LINK p = head->next; 73 74 while (p != NULL) 75 { 76 printf("%s %s %s ", p->name, p->birthday, p->phone); 77 p = p->next; 78 } 79 } 80 void cleanList(LINK head) 81 { 82 LINK p; 83 84 while (head != NULL) 85 { 86 p = head->next; 87 free(head); 88 head = p; 89 } 90 }