C语言练习——双链表下学生成绩管理系统

本文介绍了一种使用C语言基于双链表实现的学生成绩管理系统。内容涵盖学生和班级结构体初始化,学生链表及班级链表的创建,数据输入,以及查询最高分、最低分和平均分的函数实现。通过输入班级人数和学生人数,系统能进行相应的成绩管理操作。
摘要由CSDN通过智能技术生成

学生和班级结构体初始化

学生:

struct Student
{
   
        int math;			//  数学
        int chinese;		//  语文
        int english;		//	英语
        int StudentID;		// 记录学生ID
        int sum;			// 记录总分

        struct Student *next;	// 学生链表节点
};

班级:

struct Class
{
   
        int classroom;				// 教室号

        struct Student *Bhead;		// 用于指向同个班级不同学生
        struct Class *next;			// 班级链表节点
};

学生链表创建(这里以尾插法为例子!):

struct Student *studentlink(struct Student *head,int studentnumber)
{
   
        struct Student *new;		//	创建链表节点
        struct Student *p = head;	//	拿到学生链表头节点
        int i;

        for(i=1;i<=studentnumber;i++)
        {
   		//	开辟节点空间
                new = (struct Student *)malloc(sizeof(struct Student));
                new->StudentID = i;
				
				//	判断是否是第一个节点,也就是头节点
                if(p == NULL)
                {
   
                        p = new;
                        head = p;
                }
                else
                {
   		//	尾插法
                        while( p->next != NULL)
                        {
   		
                                p = p->next;	// 让next指针到尾部指向NULL
                        }

                        p->next = new;	//	让尾部节点作为头节点
                }
        }
        return head;	// 返回头节点

}

班级链表创建:

struct Class *classlink(struct Class *head,int classnumber,int studentnumber)
{
   
        struct Class *p = head;
        struct Student *student;
        struct Class *new;
        int j;

        for(j=1;j<=classnumber;j++)
        {
   
        		//	每个班级里头个一名学生完成后要重新初始化链表
                student = NULL;
				//	开辟空间
                new = (struct Class*)malloc(sizeof(struct Class));
                new->classroom = j;
				//	创建这个学生的链表记录成绩
                student = studentlink(student,studentnumber);
                new->Bhead = student;	//	指向这个班级下一个学生的链表


                if( p == NULL)	//	判断是否为头节点
                {
   
                        p = new;
                        head = p;
                }
                else
                {
   		//	尾插法
                        while(p->next != NULL)
                        {
   
                                p = p->next;
                        }
                        p->next = new;	//	将尾部节点当做头节点开始录成绩
                }
        }
        return head;

}

输入数据到链表中:

struct Class *InPutData(struct Class *head)
{
   
        struct Student *p = NULL;	//	学生链表
        struct Class *q = head;		//	班级链表

        while( q != NULL)	//	开始扫描班级链表
        {
   
                p = q->
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值