微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Multilist:指向另一个节点的指针

如何解决Multilist:指向另一个节点的指针

我正在尝试制作一个多列表,其中用户输入是 (1,350),其中 1 是学生,350 是班级。我为学生和班级创建了一个链表,但我不确定如何将学生 1 的节点链接到 350 班的节点。

链接 Class *classNode 是否有效?

我会用学生和班级创建一个新节点并将其放入一个组合列表中吗?

输出应该是:

class 350: students 1,4,6,....

student 1: classes 350,389,991...
struct Student {

        int sID;
        Class *classNode;  

        Student *nextS;
};

struct Class {

        int cID;
        Student *studentNode;  

        Class *nextC;
};

解决方法

据我所知,如果学生与某个班级有关,则学生班级很好。但我猜一个班有不止一个学生所以

struct Class {
   int cID;
   Student **studentNode;

   Class *nextC;

}

会更好。

您需要先创建一个班级而不是该班级的学生。您可以使用 nextS 搜索和添加新学生。

根据你的编辑,我改变了我的答案,这里有一个示例代码,让它看起来更好,工作更好,你需要付出真正的努力。

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

struct Student {
    int sID;

    struct Class **classNode;

    struct Student *nextS;
} ;

struct Class {
    int cID;
    struct Student **studentNode;

    struct Class *nextC;

};

int main() {

    struct Class *class1 = (struct Class*) malloc(sizeof(struct Class));
    class1->cID = 1;
    class1->studentNode = (struct Student**) malloc(sizeof(struct Student*)*2);
    class1->nextC = (struct Class*) malloc(sizeof(struct Class));
    class1->nextC->cID = 2;
    class1->nextC->studentNode = (struct Student**) malloc(sizeof(struct Student*)*2);
    struct Student *student1 = (struct Student*) malloc(sizeof (struct Student));
    student1->sID = 1;
    student1->classNode = (struct Class**) malloc(sizeof (struct Class*)*2);
    student1->nextS = (struct Student*) malloc(sizeof (struct Student));
    student1->nextS->sID = 2;
    student1->nextS->classNode = (struct Class**) malloc(sizeof (struct Class*)*2);
    class1->studentNode[0] = student1;
    class1->studentNode[1] = student1->nextS;
    class1->nextC->studentNode[0] = student1;
    class1->nextC->studentNode[1] = student1->nextS;
    student1->classNode[0] = class1;
    student1->classNode[1] = class1->nextC;
    student1->nextS->classNode[0] = class1;
    student1->nextS->classNode[1] = class1->nextC;
    printf("student1  classes ");
    printf("%d   ",student1->classNode[0]->cID);
    printf("%d\n",student1->classNode[1]->cID);

    printf("student2  classes ");
    printf("%d   ",student1->nextS->classNode[0]->cID);
    printf("%d\n",student1->nextS->classNode[1]->cID);

    printf("class1  ");
    printf("%d   ",class1->studentNode[0]->sID);
    printf("%d\n",class1->studentNode[1]->sID);

    printf("class2  ");
    printf("%d   ",class1->nextC->studentNode[0]->sID);
    printf("%d\n",class1->nextC->studentNode[1]->sID);

    
    return 0;
}

我创建了两个班级和两个学生,并将它们相互指向。但我真的很想知道你是如何得到一个糟糕的数据结构的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。