如何解决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 举报,一经查实,本站将立刻删除。