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语言嵌套链表实现学生成绩管理系统的完整攻略。

阅读剩余 65%

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

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

相关文章

  • 小米4c怎么样?小米4c搭载骁龙808和Type-C

    当谈到小米4c时,我们需要关注它的配置和性能。小米4c主打设计良好且价格亲民的特点,它的主要优势在于骁龙808处理器和Type-C接口。 小米4c搭载骁龙808处理器 小米4c搭载了骁龙808处理器,它是高通推出的一款六核心处理器,其中两个大核心时钟频率高达1.8GHz,剩下的四个小核心时钟频率为1.4GHz。 骁龙808处理器采用了Adreno 418 G…

    C 2023年5月23日
    00
  • C语言详解strcmp函数的分析及实现

    C语言详解strcmp函数的分析及实现 strcmp函数简介 strcmp()函数是C语言中用于比较两个字符串大小的函数。该函数通常用于在程序中对字符串进行排序、查找或其他处理。 strcmp()函数的定义如下: int strcmp(const char *s1, const char *s2); 该函数接受两个字符串指针参数s1和s2,并返回一个整型值。…

    C 2023年5月23日
    00
  • #FREERTOS的和heap_4内存分配算法

    FreeRTOS的heap_4内存管理算法具有内存碎片合并的功能,可以有效防止内存碎片产生,使用First fit算法,在实现上与C标准库的malloc类似,但是效率更高且能进行碎片合并回收。以下是个人对源码的解析,有空再补充详细。 一、初始化 static void prvHeapInit( void ) { BlockLink_t *pxFirstFre…

    C语言 2023年4月17日
    00
  • C语言运算符与表达式

    关于“C语言运算符与表达式”的完整攻略,我将从以下四个方面进行讲解:1. 运算符的概念和分类2. 运算符优先级和结合性3. 表达式的基本概念和组成方式4. 示范两个使用运算符和表达式的实例说明 1. 运算符的概念和分类 在C语言中,运算符是用来完成特定的操作的符号,比如加减乘除等。根据不同的功能和优先级,C语言中的运算符分为以下几类: 算术运算符:+、-、*…

    C 2023年5月23日
    00
  • C++初级线程管理

    C++初级线程管理是多线程编程中最基础的部分,它可以帮助开发者充分利用计算资源,提升程序的并发能力,从而提高程序的运行效率。下面是完整的C++初级线程管理攻略: 线程的概念和基本使用 线程的概念 线程是计算机程序执行流的最小单元,它是操作系统能够进行运算调度的基本单位。与进程不同,线程通常是在同一进程中执行的,因此共享同一份资源,包括内存空间、文件描述符和其…

    C 2023年5月22日
    00
  • ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法

    让我们一步步讲解“ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法”的完整攻略。 问题背景 在使用ShareSDK进行第三方分享的时候,存在一个BUG:在Android 9.0以上的设备上,使用ShareSDK的QQ和微信分享功能会造成App崩溃。 原因分析 经过分析,导致这个BUG的原因是因为ShareSDK中使用了一个过时的API导致的。…

    C 2023年5月23日
    00
  • 程序员都不知道C语言中的这些小细节

    当我们学习C语言时,很容易掌握其基本语法,包括变量定义、赋值、循环、逻辑运算等操作。然而,在实际开发中,可能会涉及到一些C语言中的小细节,这些细节甚至有可能被一些经验丰富的程序员所忽略。接下来,我们详细讲解“程序员都不知道C语言中的这些小细节”的攻略。 1. 整型溢出 C语言中整型变量通常分为有符号整型和无符号整型。有符号整型可以表示负数,而无符号整型只能表…

    C 2023年5月23日
    00
  • jQuery实现异步获取json数据的2种方式

    下面是关于“jQuery实现异步获取json数据的2种方式”的详细讲解攻略: 1. jQuery.ajax()方法 jQuery.ajax() 方法是 jQuery 提供的最强大、最全面、最高层次的 AJAX 实现。它能够在不需要加载页面的情况下,使用 HTTP 请求从服务器异步地加载数据,并修改现有的页面内容。以下是一段实现基于 jQuery.ajax()…

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