C语言链表题,记录学生信息

###求助,小白遇到一个C语言链表题,求助大神怎么做

创建一个 单向链表 来记录学生信息,人数3--5人;链表结点为结构变量,结构的要求如下:

struct stu_info

{

     char stu_num[10];  //学号

     char stu_name[8];  //姓名

     char stu_sex[2];    //性别

     int stu_score    //成绩

     struct stu_info *next;

};

程序设计要求:

(1)插入新的学生信息(插入节点的位置可任意指定)

(2)删除指定的学生信息

(3)根据学号查询并显示查询到的学生信息

(4)以上三项任务分别自定义函数实现,执行后显示执行结果

(5)程序运行后要求可以循环执行前三项操作,直到选择退出时结束程序


#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;
}


如果你觉得有帮助请采纳。