1. 程式人生 > 實用技巧 >實驗11-2-2 學生成績連結串列處理

實驗11-2-2 學生成績連結串列處理

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 struct stud_node {
 5     int    num;
 6     char   name[20];
 7     int    score;
 8     struct stud_node* next;
 9 };
10 
11 struct stud_node* createlist();
12 struct stud_node* deletelist(struct stud_node* head, int min_score);
13 
14 int
main() 15 { 16 int min_score; 17 struct stud_node* p, * head = NULL; 18 19 head = createlist(); 20 scanf_s("%d", &min_score); 21 head = deletelist(head, min_score); 22 for (p = head; p != NULL; p = p->next) 23 printf("%d %s %d\n", p->num, p->name, p->score);
24 25 return 0; 26 } 27 28 /* 你的程式碼將被嵌在這裡 */ 29 struct stud_node* createlist() 30 { 31 struct stud_node* head, *tail, *p; 32 int num; 33 34 head = tail = NULL; 35 scanf_s("%d", &num); 36 while (num != 0) 37 { 38 p = (struct stud_node*)malloc(sizeof(struct stud_node));
39 p->num = num; 40 scanf_s(" %s %d", p->name,20, &(p->score)); 41 p->next = NULL; 42 43 if (head == NULL) 44 { 45 head = p; 46 tail = p; 47 } 48 else 49 { 50 tail->next = p; 51 tail = p; 52 } 53 54 scanf_s("%d", &num); 55 } 56 57 return head; 58 } 59 struct stud_node* deletelist(struct stud_node* head, int min_score) 60 { 61 struct stud_node* p, * q; 62 63 while ((head != NULL) && (head->score < min_score)) 64 { 65 p = head; 66 head = head->next; 67 free(p); 68 } 69 70 if (head != NULL) 71 { 72 q = head; 73 p = head->next; 74 75 while (p != NULL) 76 { 77 if (p->score < min_score) 78 { 79 q->next = p->next; 80 free(p); 81 p = q->next; 82 } 83 else 84 { 85 q = p; 86 p = p->next; 87 } 88 } 89 } 90 91 return head; 92 }