#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu_info {
char stu_num[10]; // 学号
char stu_name[8]; // 姓名
char stu_sex[2]; // 性别
int stu_score; // 成绩
struct stu_info *next; // 指向下一个结点的指针
};
// 插入新的学生信息
void insert_node(struct stu_info **head, char *stu_num, int pos) {
// 申请新结点
struct stu_info *new_node = malloc(sizeof(struct stu_info));
// 将新结点的信息赋值为要插入的学号
strcpy(new_node->stu_num, stu_num);
// 如果要插入的位置是第一个结点,则直接将新结点插入到头部
if (pos == 1) {
new_node->next = *head;
*head = new_node;
} else {
// 否则,先找到要插入的位置的前一个结点
struct stu_info *prev = *head;
for (int i = 1; i < pos - 1; i++) {
prev = prev->next;
}
// 将新结点插入到链表中
new_node->next = prev->next;
prev->next = new_node;
}
}
// 删除指定的学生信息
void delete_node(struct stu_info **head, char *stu_num) {
// 先找到要删除的结点的前一个结点
struct stu_info *prev = *head;
while (prev->next != NULL && strcmp(prev->next->stu_num, stu_num) != 0) {
prev = prev->next;
}
// 如果找到了要删除的结点,则将前一个结点的 next 指针指向要删除的结点的下一个结点
if (prev->next != NULL) {
struct stu_info *node_to_delete = prev->next;
prev->next = node_to_delete->next;
free(node_to_delete);
}
}
// 根据学号查询并显示查询到的学生信息
void find_node(struct stu_info *head, char *stu_num) {
struct stu_info *node = head;
while (node != NULL) {
if (strcmp(node->stu_num, stu_num) == 0) {
// 找到了学号匹配的结点,输出其信息
printf("学号: %s\n", node->stu_num);
printf("姓名: %s\n", node->stu_name);
printf("性别: %s\n", node->stu_sex);
printf("成绩: %d\n", node->stu_score);
return;
}
node = node->next;
}
// 如果没有找到学号匹配的结点,则输出提示
printf("未找到学号为 %s 的学生信息\n", stu_num);
}
int main() {
// 初始化链表
struct stu_info *head = NULL;
// 循环执行操作
int op;
do {
printf("\n1. 插入学生信息\n");
printf("2. 删除学生信息\n");
printf("3. 查询学生信息\n");
printf("4. 退出\n");
printf("请选择要执行的操作: ");
scanf("%d", &op);
switch (op) {
case 1: {
// 插入学生信息
char stu_num[10];
int pos;
printf("请输入要插入的学号: ");
scanf("%s", stu_num);
printf("请输入要插入的位置(1-based): ");
scanf("%d", &pos);
insert_node(&head, stu_num, pos);
break;
}
case 2: {
// 删除学生信息
char stu_num[10];
printf("请输入要删除的学号: ");
scanf("%s", stu_num);
delete_node(&head, stu_num);
break;
}
case 3: {
// 查询学生信息
char stu_num[10];
printf("请输入要查询的学号: ");
scanf("%s", stu_num);
find_node(head, stu_num);
break;
}
case 4: {
// 退出程序
break;
}
default: {
printf("输入错误,请重新输入\n");
break;
}
}
} while (op != 4);
return 0;
}
如果你觉得有帮助请采纳。