1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
| #include <stdio.h> #include <stdlib.h> #include <string.h>
typedef struct Student { char sno[5]; char sname[10]; int score; struct Student *rear; } Student;
Student* createStudent(const char* sno, const char* sname, int score) { Student* newStudent = (Student*)malloc(sizeof(Student)); if (newStudent) { strncpy((*newStudent).sno, sno, 5); strncpy((*newStudent).sname, sname, 10); (*newStudent).score = score; (*newStudent).rear = NULL; } return newStudent; }
Student* insertStudent(Student* head, Student* newStudent) { if (head == NULL || (*newStudent).score > (*head).score) { (*newStudent).rear = head; return newStudent; }
Student* current = head; while ((*current).rear != NULL && (*((*current).rear)).score > (*newStudent).score) { current = (*current).rear; }
(*newStudent).rear = (*current).rear; (*current).rear = newStudent; return head; }
void printList(Student* head) { Student* current = head; while (current != NULL) { printf("%s %s %d\n", (*current).sno, (*current).sname, (*current).score); current = (*current).rear; } }
Student* deleteStudent(Student* head, const char* sno) { Student* current = head; Student* previous = NULL; while (current != NULL && strcmp((*current).sno, sno) != 0) { previous = current; current = (*current).rear; }
if (current == NULL) return head;
if (previous == NULL) { head = (*current).rear; } else { (*previous).rear = (*current).rear; }
free(current); return head; }
int main() { Student* head = NULL; head = insertStudent(head, createStudent("1001", "学生甲", 95)); head = insertStudent(head, createStudent("1002", "学生乙", 75)); head = insertStudent(head, createStudent("1003", "学生丙", 83)); head = insertStudent(head, createStudent("1004", "学生丁", 93)); head = insertStudent(head, createStudent("1005", "学生戊", 80));
printf("初始链表:\n"); printList(head);
head = deleteStudent(head, "1003");
printf("删除后的链表:\n"); printList(head);
while (head != NULL) { Student* temp = head; head = (*head).rear; free(temp); }
return 0; }
|