以下是一个简单的学生信息示意性检索程序的实现,使用C语言编写,并包含了链表的基本操作。请注意,这是一个非常基础的示例,实际生产环境中你可能需要添加错误处理、内存管理优化、数据验证等更复杂的功能。
首先,定义学生信息的结构体以及链表节点的结构体:
```c
#include
#include
#include
#define MAX_SEX_LENGTH 10
#define MAX_CLASS_LENGTH 30
typedef struct Student {
int id;
char sex[MAX_SEX_LENGTH];
int age;
char class_name[MAX_CLASS_LENGTH];
} Student;
typedef struct StudentNode {
Student data;
struct StudentNode *next;
} StudentNode;
typedef struct {
StudentNode *head;
int size;
} StudentList;
```
接下来,我们来实现六个功能模块:
1. 学生信息的初始化(链表的创建)
2. 学生的插入
3. 学生的删除(按学号删除)
4. 学生信息的修改(按学号查找到该学生并修改)
5. 学生信息的查找(按学号查找)
6. 显示当前所有学生信息
```c
// 1. 初始化链表
void initList(StudentList *list) {
list->head = NULL;
list->size = 0;
}
// 2. 插入学生
void insertStudent(StudentList *list, Student *student) {
StudentNode *newNode = (StudentNode *)malloc(sizeof(StudentNode));
if (!newNode) {
perror("Memory allocation failed");
exit(EXIT_FAILURE);
}
newNode->data = *student;
newNode->next = list->head;
list->head = newNode;
list->size++;
}
// 3. 按学号删除学生
void deleteStudentById(StudentList *list, int id) {
StudentNode *prev = NULL;
StudentNode *current = list->head;
while (current != NULL && current->data.id != id) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("Student with ID %d not found.\n", id);
} else {
if (prev == NULL) {
list->head = current->next;
} else {
prev->next = current->next;
}
free(current);
list->size--;
}
}
// 4. 修改学生信息
void updateStudentById(StudentList *list, int id, Student *newInfo) {
StudentNode *current = list->head;
while (current != NULL && current->data.id != id) {
current = current->next;
}
if (current != NULL) {
current->data = *newInfo;
printf("Student with ID %d updated.\n", id);
} else {
printf("Student with ID %d not found.\n", id);
}
}
// 5. 查找学生信息
Student *findStudentById(StudentList *list, int id) {
StudentNode *current = list->head;
while (current != NULL && current->data.id != id) {
current = current->next;
}
if (current != NULL) {
return ¤t->data;
} else {
return NULL;
}
}
// 6. 显示所有学生信息
void displayAllStudents(const StudentList *list) {
StudentNode *current = list->head;
printf("ID\tSex\tAge\tClass\n");
while (current != NULL) {
printf("%d\t%s\t%d\t%s\n", current->data.id, current->data.sex, current->data.age, current->data.class_name);
current = current->next;
}
}
int main() {
int numStudents, studentId;
StudentList studentList;
initList(&studentList);
printf("Enter the number of students: ");
scanf("%d", &numStudents);
for (int i = 0; i < numStudents; i++) {
Student newStudent;
printf("Enter details