#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;
}