#include <stdio.h> #include <stdlib.h> #include <string.h> // 学生信息结构体 struct Student { char name[50]; char gender[10]; int student_number; char hobbies[100]; struct Student* next; }; // 初始化一个空表 struct Student* initialize() { return NULL; } // 后插法插入学生信息 struct Student* insert(struct Student* head, char name[], char gender[], int student_number, char hobbies[]) { struct Student* new_student = (struct Student*)malloc(sizeof(struct Student)); strcpy(new_student->name, name); strcpy(new_student->gender, gender); new_student->student_number = student_number; strcpy(new_student->hobbies, hobbies); new_student->next = NULL; if (head == NULL) { return new_student; } struct Student* current = head; while (current->next != NULL) { current = current->next; } current->next = new_student; return head; } // 根据学号对链表节点进行排序 struct Student* sort_by_student_number(struct Student* head) { // 使用冒泡排序 int swapped; struct Student* ptr1; struct Student* lptr = NULL; if (head == NULL) { return NULL; } do { swapped = 0; ptr1 = head; while (ptr1->next != lptr) { if (ptr1->student_number > ptr1->next->student_number) { // 交换节点 struct Student* temp = ptr1; ptr1 = ptr1->next; ptr1->next = temp; swapped = 1; } ptr1 = ptr1->next; } lptr = ptr1; } while (swapped); return head; } // 根据姓名或学号顺序插入新创建的学生信息 struct Student* insert_sorted(struct Student* head, char name[], char gender[], int student_number, char hobbies[]) { struct Student* new_student = (struct Student*)malloc(sizeof(struct Student)); strcpy(new_student->name, name); strcpy(new_student->gender, gender); new_student->student_number = student_number; strcpy(new_student->hobbies, hobbies); new_student->next = NULL; if (head == NULL || student_number < head->student_number) { new_student->next = head; return new_student; } struct Student* current = head; while (current->next != NULL && current->next->student_number < student_number) { current = current->next; } new_student->next = current->next; current->next = new_student; return head; } // 根据学号删除学生信息 struct Student* delete_by_student_number(struct Student* head, int student_number) { if (head == NULL) { return NULL; } if (head->student_number == student_number) { struct Student* temp = head; head = head->next; free(temp); return head; } struct Student* current = head; while (current->next != NULL && current->next->student_number != student_number) { current = current->next; } if (current->next != NULL) { struct Student* temp = current->next; current->next = current->next->next; free(temp); } return head; } // 打印所有学生信息 void print_students(struct Student* head) { struct Student* current = head; while (current != NULL) { printf("姓名:%s,性别:%s,学号:%d,兴趣爱好:%s\n", current->name, current->gender, current->student_number, current->hobbies); current = current->next; } } int main() { struct Student* head = initialize(); // 示例:插入学生信息 head = insert(head, "张三", "男", 1001, "篮球"); head = insert(head, "李四", "女", 1002, "音乐"); // ... 插入更多学生信息 // 排序 head = sort_by_student_number(head); // 插入新学生信息 head = insert_sorted(head, "王五", "男", 1003, "游泳"); // 打印所有学生信息 print_students(head); // 其他操作... return 0; }