C语言用链表实现学生信息系统中的删除
时间: 2024-02-25 09:57:38 浏览: 93
C语言链表,写入删除
好的,针对您的问题,我可以给出以下的C语言代码实现链表删除学生信息的操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
typedef struct student {
char name[20];
int age;
int id;
struct student *next;
} Student;
// 创建一个链表
Student *create_list() {
Student *head = (Student *)malloc(sizeof(Student));
head->next = NULL;
return head;
}
// 插入学生信息
void insert_student(Student *head, Student *stu) {
stu->next = head->next;
head->next = stu;
}
// 删除学生信息
void delete_student(Student *head, int id) {
Student *p = head->next;
Student *q = head;
while (p != NULL) {
if (p->id == id) {
q->next = p->next;
free(p);
printf("删除成功!\n");
return;
}
q = p;
p = p->next;
}
printf("没有找到该学生!\n");
}
// 打印所有学生信息
void print_students(Student *head) {
Student *p = head->next;
while (p != NULL) {
printf("姓名:%s,年龄:%d,学号:%d\n", p->name, p->age, p->id);
p = p->next;
}
}
int main() {
Student *head = create_list();
// 添加学生信息
Student *stu1 = (Student *)malloc(sizeof(Student));
strcpy(stu1->name, "张三");
stu1->age = 18;
stu1->id = 1001;
insert_student(head, stu1);
Student *stu2 = (Student *)malloc(sizeof(Student));
strcpy(stu2->name, "李四");
stu2->age = 19;
stu2->id = 1002;
insert_student(head, stu2);
Student *stu3 = (Student *)malloc(sizeof(Student));
strcpy(stu3->name, "王五");
stu3->age = 20;
stu3->id = 1003;
insert_student(head, stu3);
// 打印所有学生信息
printf("所有学生信息:\n");
print_students(head);
// 删除学生信息
printf("删除学号为1002的学生信息...\n");
delete_student(head, 1002);
// 再次打印所有学生信息
printf("删除后的所有学生信息:\n");
print_students(head);
return 0;
}
```
在上面的代码中,我们先定义了一个 `Student` 结构体,用于存储学生的信息,包括姓名、年龄、学号和指向下一个学生信息的指针。然后,我们通过 `create_list` 函数创建一个链表,并通过 `insert_student` 函数向链表中插入学生信息。最后,我们通过 `delete_student` 函数实现了删除指定学号的学生信息的功能。在删除学生信息时,我们遍历链表并比较每个学生信息的学号,如果找到了要删除的学生信息,则更新前一个学生信息的指针,使其指向要删除的学生信息的下一个节点,并释放要删除的学生信息的内存空间。
希望这段代码能够帮助您实现链表删除学生信息的操作。
阅读全文