C语言 如何创建嵌套链表?

bfrts1fy  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(197)

一个讲师教4个不同的班级。每个班级的学生人数可能会有所不同。
有两种不同的链接列表结构,用于容纳课程和学生。
1.在班级(nodeClass)的结构中,保存有该班级(classID)的信息和该班级(classMidtermAverage)的学生的期中考试平均值,除此之外,还存在指向下一个班级的指针和指向属于用于定义学生信息的结构(nodeStudent)的节点的指针。
1.在名为nodeStudent的结构中,有一个学生的id、期中成绩和一个显示同一个班级中下一个学生的指针。
1.程序以用户提供的学号和期中成绩为输入,学号以66开头的学生为第一班,以77开头的学生为第二班,以88开头的学生为第三班,并且以99开头的学生在第4个班级中。学生必须按顺序出现在链接列表中。排序将根据期中成绩降序进行。如果笔记相同,则应将编号较低的放在列表的第一位。添加时应通过将其添加到正确的位置来保留排序后的列表。将所有学生添加到列表后,将计算每个类的中间平均值并将其保存在从相关类的nodeClass结构生成的节点的classMidtermAverage变量中。
我知道我们必须创建一个嵌套链表,但是我很难将数据插入到主链表(班级链表)和子链表(学生列表)中。

struct nodeClass
{
    int classID;
    double classMidtermAverage;
    struct nodeClass *next;
    struct nodeStudent *studentPtr;
};

struct nodeStudent
{
    int studentID;
    int midterm;
    struct nodeStudent *next;
};

struct nodeClass* insert(struct nodeClass **head, int id, int midterm) {
    struct nodeStudent* newPtr;
    
    struct nodeClass* temp= (struct nodeClass*) malloc(sizeof(struct nodeClass*));
    temp->studentPtr = (struct nodeStudent*) malloc(sizeof(struct nodeStudent));
    temp->studentPtr->studentID=id;
    temp->studentPtr->midterm=midterm;

    long classcode=id;
    while (classcode>=100){
        classcode=classcode/10;
        }
    
    if (classcode=66) {
        temp->classID=i;
        head=temp;
    }
    else if( classcode=77) {
        temp->classID=2;
        head->next=temp;
        struct nodeClass* class2= head->next;
    }
    else if( classcode=88) {
        temp->classID=3;
        head->next->next=temp;
        struct nodeClass* class3= head->next->next;
    }
    else if( classcode=99) {
        temp->classID=4;
        head->next->next->next=temp;
        struct nodeClass* class3= head->next->next->next;
    }
return head;
}
    

struct nodeClass* computeClassAverage(*head) {
    nodeClass* tmp;
    for( tmp=head; tmp)
}

void printAll(*head);

主要功能是

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#include "function.h"

int main()
{
    struct nodeClass *head = NULL;

    int id, midterm;
    scanf("%d", &id);
    while(id!=-1)
    {
        scanf("%d", &midterm);
        insert(&head, id, midterm);
        scanf("%d", &id);
    }

    computeClassAverage(head);

        
    printAll(head);

    return 0;

}
krcsximq

krcsximq1#

你似乎对这个问题有些误解,我不太明白,所以我怀疑这个答案是否能使你满意,但我得冒一个险。
下面是将新元素插入到链接列表中的一种方法:

nodeStudent* insertStudent(nodeStudent *head, nodeStudent *newp)
{
  newp->next = head;
  return newp;
}

nodeClass* insertClass(nodeClass *head, nodeClass *newp)
{
  newp->next = head;
  return newp;
}

注意,这些函数在列表的 head 处添加新元素。编写函数在给定元素后添加元素,或者找到列表的末尾并在那里插入新元素并不困难。

相关问题