C语言,删除结构体学生信息
在C语言中,可以通过数组或链表来存储学生信息并实现删除操作。下面将详细介绍如何在链表中删除特定学生的信息,包括初始化链表、添加节点、删除节点和打印链表内容的过程。
结构体定义
首先,定义一个表示学生信息的结构体:
c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student {
int id;
char name[50];
struct Student* next;
} Student;
添加学生信息
创建一个函数用于添加学生信息到链表中:
cStudent* addStudent(Student* head, int id, const char* name) {
Student* newStudent = (Student*)malloc(sizeof(Student));
newStudent->id = id;
strcpy(newStudent->name, name);
newStudent->next = head;
return newStudent;
}
删除学生信息
创建一个函数用于删除链表中具有特定ID的学生信息:
cStudent* deleteStudent(Student* head, int id) {
Student* current = head;
Student* previous = NULL;
// 如果链表为空
if (head == NULL) {
printf("List is empty.\n");
return NULL;
}
// 检查头节点是否是要删除的节点
if (current != NULL && current->id == id) {
head = current->next;
free(current);
printf("Student with ID %d deleted.\n", id);
return head;
}
// 遍历链表寻找要删除的节点
while (current != NULL && current->id != id) {
previous = current;
current = current->next;
}
// 如果没有找到节点
if (current == NULL) {
printf("Student with ID %d not found.\n", id);
return head;
}
// 删除节点
previous->next = current->next;
free(current);
printf("Student with ID %d deleted.\n", id);
return head;
}
打印学生信息
创建一个函数用于打印链表中的所有学生信息:
cvoid printStudents(Student* head) {
Student* current = head;
while (current != NULL) {
printf("ID: %d, Name: %s\n", current->id, current->name);
current = current->next;
}
}
主函数
在主函数中初始化链表、添加和删除学生信息并打印链表内容:
cint main() {
Student* head = NULL;
// 添加学生信息
head = addStudent(head, 1, "Alice");
head = addStudent(head, 2, "Bob");
head = addStudent(head, 3, "Charlie");
printf("Student list:\n");
printStudents(head);
// 删除学生信息
head = deleteStudent(head, 2);
printf("\nStudent list after deletion:\n");
printStudents(head);
// 清理内存
while (head != NULL) {
Student* temp = head;
head = head->next;
free(temp);
}
return 0;
}
详细解释
- 定义结构体:创建一个表示学生信息的结构体,包含学生ID、姓名和指向下一个学生的指针。
- 添加学生信息:创建一个函数用于向链表头部添加新的学生信息。
- 删除学生信息:创建一个函数用于删除链表中具有特定ID的学生节点。
- 打印学生信息:创建一个函数用于遍历链表并打印所有学生的信息。
- 主函数:在主函数中,演示如何添加和删除学生信息,并打印链表内容。
总结
该示例展示了如何在C语言中使用链表存储和删除学生信息,包括初始化链表、添加节点、删除节点和打印节点内容的实现。
关键字
C语言,结构体,学生信息,链表,删除节点,添加节点,打印链表,动态内存分配