使用c语言的链式存储结构实现学生信息管理的增删改查
时间: 2023-11-28 22:48:33 浏览: 36
以下是使用C语言链式存储结构实现学生信息管理的增删改查的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生结构体
typedef struct student {
char name[20]; // 姓名
int age; // 年龄
char id[10]; // 学号
struct student *next;
} Student;
// 创建新的学生节点
Student *create_student() {
Student *new_student = (Student *)malloc(sizeof(Student));
printf("请输入学生姓名:");
scanf("%s", new_student->name);
printf("请输入学生年龄:");
scanf("%d", &(new_student->age));
printf("请输入学生学号:");
scanf("%s", new_student->id);
new_student->next = NULL;
return new_student;
}
// 添加学生
void add_student(Student **head) {
Student *new_student = create_student();
if (*head == NULL) {
*head = new_student;
} else {
Student *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_student;
}
printf("添加成功!\n");
}
// 删除学生
void delete_student(Student **head) {
if (*head == NULL) {
printf("链表为空,无法删除!\n");
return;
}
char id[10];
printf("请输入要删除学生的学号:");
scanf("%s", id);
Student *p = *head;
if (strcmp(p->id, id) == 0) {
*head = p->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL) {
if (strcmp(p->next->id, id) == 0) {
Student *temp = p->next;
p->next = temp->next;
free(temp);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("未找到该学号的学生!\n");
}
// 修改学生信息
void modify_student(Student *head) {
if (head == NULL) {
printf("链表为空,无法修改!\n");
return;
}
char id[10];
printf("请输入要修改学生的学号:");
scanf("%s", id);
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("请输入新的学生姓名:");
scanf("%s", p->name);
printf("请输入新的学生年龄:");
scanf("%d", &(p->age));
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到该学号的学生!\n");
}
// 查找学生信息
void find_student(Student *head) {
if (head == NULL) {
printf("链表为空,无法查找!\n");
return;
}
char id[10];
printf("请输入要查找学生的学号:");
scanf("%s", id);
Student *p = head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
printf("学生姓名:%s\n", p->name);
printf("学生年龄:%d\n", p->age);
printf("学生学号:%s\n", p->id);
return;
}
p = p->next;
}
printf("未找到该学号的学生!\n");
}
// 输出所有学生信息
void print_all_students(Student *head) {
if (head == NULL) {
printf("链表为空!\n");
return;
}
Student *p = head;
while (p != NULL) {
printf("学生姓名:%s\n", p->name);
printf("学生年龄:%d\n", p->age);
printf("学生学号:%s\n", p->id);
printf("\n");
p = p->next;
}
}
int main() {
Student *head = NULL; // 头节点
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加