要实现一个学生信息示意性检索程序,我们首先定义一个结构体来表示学生信息,然后实现对应的链表操作,包括创建、插入、删除、修改、查找和显示学生信息的功能。以下是一个简单的C语言实现:
```c
#include
#include
#include
// 定义学生信息结构体
typedef struct Student {
int id;
char sex;
int age;
char class[30];
struct Student *next;
} Student;
// 定义全局头结点
Student *head = NULL;
// 学生信息的初始化(链表的创建)
void init() {
head = (Student *)malloc(sizeof(Student));
if (!head) {
exit(EXIT_FAILURE);
}
head->next = NULL;
}
// 学生的插入
void insertStudent() {
Student *newNode = (Student *)malloc(sizeof(Student));
Student *current = head;
printf("请输入学生的学号、性别、年龄和班级,用空格隔开:\n");
scanf("%d %c %d %s", &newNode->id, &newNode->sex, &newNode->age, newNode->class);
// 查找插入位置
while (current->next != NULL) {
current = current->next;
}
// 插入到链表尾部
current->next = newNode;
newNode->next = NULL;
}
// 学生的删除(按学号删除)
void deleteStudent() {
int id;
Student *current = head;
Student *prev = NULL;
printf("请输入要删除学生的学号:\n");
scanf("%d", &id);
// 查找要删除的节点
while (current->next != NULL && current->next->id != id) {
prev = current;
current = current->next;
}
// 如果找到节点,则删除
if (current->next != NULL) {
Student *temp = current->next;
current->next = temp->next;
free(temp);
printf("学生信息删除成功。\n");
} else {
printf("未找到该学号的学生。\n");
}
}
// 学生信息的修改(按学号查找到该学生并修改)
void modifyStudent() {
int id;
Student *current = head;
printf("请输入要修改学生的学号:\n");
scanf("%d", &id);
// 查找要修改的节点
while (current->next != NULL && current->next->id != id) {
current = current->next;
}
// 如果找到节点,则修改
if (current->next != NULL) {
printf("请重新输入学生的性别、年龄和班级,用空格隔开:\n");
scanf(" %c %d %s", ¤t->next->sex, ¤t->next->age, current->next->class);
printf("学生信息修改成功。\n");
} else {
printf("未找到该学号的学生。\n");
}
}
// 学生信息的查找(按学号查找)
void findStudent() {
int id;
Student *current = head;
printf("请输入要查找学生的学号:\n");
scanf("%d", &id);
// 查找学生信息
while (current->next != NULL && current->next->id != id) {
current = current->next;
}
// 如果没有找到
if (current->next == NULL) {
printf("未找到该学号的学生。\n");
} else {
printf("学生信息如下:\n");
printf("学号:%d\n", current->next->id);
printf("性别:%c\n", current->next->sex);
printf("年龄:%d\n", current->next->age);
printf("班级:%s\n", current->next->class);
}
}
// 显示当前所有学生信息
void showAllStudents() {
Student *current = head->next;
printf("当前所有学生信息如下:\n");
while (current != NULL) {
printf("学号:%d\n", current->id);
printf("性别:%c\n", current->sex);
printf("年龄:%d\n", current->age);