【问题标题】:Multilist: Pointer pointing to another nodeMultilist:指向另一个节点的指针
【发布时间】:2021-03-07 16:35:23
【问题描述】:

我试图创建一个多列表,其中用户输入为 (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 Classstruct Student { } 中使用时是未知的。要解决此问题,您可以插入前向声明:struct Class;(之前)。这足以用作指针。

标签: c++ data-structures linked-list


【解决方案1】:

据我了解,如果学生与 iff 课程相关,则学生课程很好。但我猜一个班有不止一个学生,所以

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;
}

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

【讨论】:

  • 所以当我这样做并运行时,我得到了很多错误:错误:重新定义'class classList' class classList{。错误:#include 嵌套太深
猜你喜欢
  • 1970-01-01
  • 2021-02-19
  • 2019-04-19
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多