C语言嵌套链表实现学生成绩管理系统

下面我将详细讲解“C语言嵌套链表实现学生成绩管理系统”的完整攻略。

什么是嵌套链表?

嵌套链表就是在链表的节点中包含另一个链表节点的指针,这样就可以形成多级结构。在C语言中,可以使用结构体和指针实现嵌套链表。

实现学生成绩管理系统的步骤

下面是实现学生成绩管理系统的步骤:

  1. 定义链表节点结构体
struct node {
    int stu_id; //学生编号
    char stu_name[20]; //学生姓名
    int stu_score; //学生成绩
    struct node *next; //指向下一个学生节点的指针
    struct grade *grade_list; //指向学生所在班级的链表的指针
};
  1. 定义班级链表节点结构体
struct grade {
    int grade_id; //班级编号
    struct node *stu_list; //指向该班级的学生链表的指针
    struct grade *next; //指向下一个班级节点的指针
};
  1. 初始化班级链表

在main函数中,定义一个班级链表的头指针,把它初始化为NULL。

struct grade *grade_head = NULL;
  1. 插入班级节点

定义一个函数InsertGrade,在该函数中创建一个班级节点,并把它插入进班级链表中。

void InsertGrade(int grade_id) {
    struct grade *new_grade;
    new_grade = (struct grade *)malloc(sizeof(struct grade));
    new_grade->grade_id = grade_id;
    new_grade->stu_list = NULL;
    new_grade->next = grade_head;
    grade_head = new_grade;
}
  1. 插入学生节点

定义一个函数InsertStu,在该函数中,先根据学生所在班级编号查找到该班级链表中的节点,然后在该节点的学生链表中插入一个新的学生节点。

void InsertStu(int grade_id, int stu_id, char stu_name[], int stu_score) {
    struct grade *pgrade = grade_head;
    while(pgrade){
        if(pgrade->grade_id == grade_id){
            struct node *new_stu;
            new_stu = (struct node *)malloc(sizeof(struct node));
            new_stu->stu_id = stu_id;
            strcpy(new_stu->stu_name, stu_name);
            new_stu->stu_score = stu_score;
            new_stu->next = pgrade->stu_list;
            pgrade->stu_list = new_stu;
            new_stu->grade_list = pgrade;
            break;
        }
        pgrade = pgrade->next;
    }
}
  1. 遍历学生成绩

定义一个函数Display,在该函数中按以下方式遍历所有学生的信息:

(1)遍历班级链表,对于每一个班级节点,依次遍历该班级链表中的所有学生节点

(2)输出每个学生节点中包含的学生编号、姓名和成绩。

void Display() {
    struct grade *pgrade = grade_head;
    while(pgrade){
        printf("班级编号:%d\n", pgrade->grade_id);
        struct node *pstu = pgrade->stu_list;
        while(pstu){
            printf("学生编号:%d,姓名:%s,分数:%d\n", pstu->stu_id, pstu->stu_name, pstu->stu_score);
            pstu = pstu->next;
        }
        pgrade = pgrade->next;
    }
}

示例说明

下面给出两个示例说明:

示例1:插入一个班级,并在其中插入两个学生

InsertGrade(1);
InsertStu(1, 1, "Tom", 90);
InsertStu(1, 2, "Jerry", 80);

Display();

输出结果:

班级编号:1
学生编号:2,姓名:Jerry,分数:80
学生编号:1,姓名:Tom,分数:90

示例2:插入两个班级,分别在其中插入一个学生

InsertGrade(1);
InsertGrade(2);
InsertStu(1, 1, "Tom", 90);
InsertStu(2, 1, "Jerry", 80);

Display();

输出结果:

班级编号:2
学生编号:1,姓名:Jerry,分数:80
班级编号:1
学生编号:1,姓名:Tom,分数:90

以上就是C语言嵌套链表实现学生成绩管理系统的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言嵌套链表实现学生成绩管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++ 中的类型详细

    C++ 中的类型详细 数据类型的定义 在C++中,常用的数据类型包括: 基本类型:整型、字符型、布尔类型、浮点型等。 构造类型:数组、结构体、联合体、枚举等。 指针类型:指向其他变量的指针。 引用类型:引用是某个变量的别名。 类类型:类是一个自定义的数据类型,可以包含属性和方法。 基本数据类型 C++中的基本数据类型包括:整型、浮点型、字符型、布尔类型等。 …

    C 2023年5月22日
    00
  • c++ 让程序开机自动启动的方法

    当我们想让编写的c++程序自动启动时,可以采用下面几种方法来实现。 方法一:修改注册表 假设我们要设置的程序名为 test.exe,要将其设置为系统开机启动的程序。可以使用以下步骤: 打开注册表编辑器:在开始菜单中输入 regedit,打开注册表编辑器。 找到启动项:依次展开 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft…

    C 2023年5月23日
    00
  • OPPO R1C怎么样?OPPO R1C发布时间及配置介绍

    OPPO R1C怎么样? 发布时间 OPPO R1C是2015年1月发布的,当时它的外观设计和拍照功能引起了很多人的关注。 配置介绍 外观设计 OPPO R1C采用了2.5D玻璃面板和金属边框的设计,具有非常优秀的手感和外观表现。另外,R1C还采用了悬浮玻璃后盖设计,整体视觉效果非常出色。 基本配置 OPPO R1C搭载了高通骁龙615的芯片,采用超大1/3…

    C 2023年5月23日
    00
  • C语言实现字符串替换的示例代码

    下面我来详细讲解一下“C语言实现字符串替换的示例代码”的完整攻略。该攻略分为以下几个部分: 前置知识 在学习字符串替换的示例代码之前,需要了解以下常用C语言函数: strcpy() 函数原型: char *strcpy(char *dest, const char *src); 函数说明: 将src所指向的字符串复制到dest所指向的字符串中,即把src的内…

    C 2023年5月24日
    00
  • 应用程序无法正常启动 错误代码c0000005怎么解决?

    问题描述: 在运行某些应用程序时,可能会遇到“应用程序无法正常启动 错误代码c0000005”的错误。该错误表示应用程序无法正常启动,并且可能会导致应用程序崩溃或无法正常运行。 解决方法如下: 一、重新安装应用程序 应用程序无法正常启动的原因之一是重要的程序文件已被删除或损坏。在这种情况下,最简单的方法是重新安装该程序,以确保所有程序文件都完整并在其正确的位…

    C 2023年5月23日
    00
  • FTP客户端c代码功能实现

      现在市面上有很多免费的FTP软件:如FileZilla ,那如果想自己在代码中实现与ftp服务器的上传下载文件该如何实现那?  本质上ftp协议就是TCP基础上建立的一种协议,具体如下。 FTP 概述 文件传输协议(FTP)作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享性和可靠高效地传送数据。 在传输文件时,FT…

    C语言 2023年4月18日
    00
  • 基于C语言实现学生选课系统

    基于C语言实现学生选课系统完整攻略 系统需求分析 要实现一个学生选课系统,我们需要以下几个必要的功能模块:- 学生登录模块- 教师登录模块- 管理员登录模块- 选课模块- 退课模块- 显示已选课程模块 系统设计 根据以上需求分析,我们可以设计出如下的系统框架: int main(){ int choice; while(1){ printf("请输…

    C 2023年5月23日
    00
  • C语言如何利用异或进行两个值的交换详解

    可以使用异或运算符(^)来交换两个变量的值,其原理是利用异或运算符具有自反性和对称性的特点。 具体来说,设有两个变量 a 和 b,其初始值分别为 A 和 B,则交换过程可以如下描述: 1.将 a 与 b 进行异或运算,即 a = a ^ b; 2.将 b 与 a 进行异或运算,即 b = b ^ a; 3.将 a 与 b 进行异或运算,即 a = a ^ b…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部