C语言学生管理系统,使用链表实现。它提供了添加、删除、打印学生信息的功能。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student {
int id; //学生编号
char name[20]; //姓名
struct Student *next;
} Student;
// 添加学生的函数
void add_student(Student **head, int id, const char *name) {
// 分配内存空间给新学生结构体
Student *new_student = (Student *)malloc(sizeof(Student));
// 设置新学生的id
new_student->id = id;
// 设置新学生的名字
strcpy(new_student->name, name);
// 将新学生的next指针指向当前的头结点
new_student->next = *head;
// 更新头结点为新添加的学生结构体
*head = new_student;
}
// 删除学生的函数
void delete_student(Student **head, int id) {
// 初始化current指针指向头结点,previous指针为空
Student *current = *head, *previous = NULL;
// 遍历链表,查找需要删除的学生结点
while (current != NULL) {
// 如果找到匹配的id
if (current->id == id) {
// 如果previous为NULL,说明需要删除的是头结点
if (previous == NULL) {
// 更新头结点为当前结点的下一个结点
*head = current->next;
} else {
// 否则将previous结点的next指针指向当前结点的下一个结点,从而移除当前结点
previous->next = current->next;
}
// 释放当前结点的内存空间
free(current);
return;
}
// 更新previous为当前结点,current为下一个结点,继续遍历
previous = current;
current = current->next;
}
}
// 打印学生信息的函数
void print_students(Student *head) {
// 初始化current指针指向头结点
Student *current = head;
// 打印标题
printf("学生名单:\n");
// 遍历链表,打印每个学生的信息
while (current != NULL) {
printf("ID: %d, Name: %s\n", current->id, current->name);
// 更新current为下一个结点
current = current->next;
}
}
int main() {
Student *head = NULL;
add_student(&head, 1, "张三");
add_student(&head, 2, "李四");
add_student(&head, 3, "王五");
print_students(head);
delete_student(&head, 2);
print_students(head);
return 0;
}