gpt4 book ai didi

c - 迭代链表问题

转载 作者:行者123 更新时间:2023-11-30 16:46:33 24 4
gpt4 key购买 nike

假设我有以下结构:

// structures
typedef struct student {
char *name;
int id;
struct clist *courses;
} student;

typedef struct course {
char *title;
int number;
struct slist *students;
} course;

typedef struct slist {
student *info;
struct slist *next;
} slist;

typedef struct clist {
course *info;
struct clist *next;
} clist;

假设 clistslist 内部有内容。现在我的问题是:我在迭代 clistslist 结构(链接列表)时遇到问题。我制作了下一个功能,用于将类(class)添加到学生类(class)中:

void reg_student(slist *students,clist *courses,int id,int number){
clist* Cpointer=courses;
slist* Spointer=student;

//finding course location
for(;Cpointer->info->number!=number;Cpointer=Cpointer->next);

//find student location
for(;Spointer->info->id != id;Spointer=Spointer->next);

//adding course to student courses list
Spointer->info->courses=Cpointer;
Spointer->info->courses->next->NULL;
return;
}

当它开始搜索类(class)位置时,它会删除他之前的所有类(class)。例如,假设我正在寻找类(class)号“555”,并且类(class)列表中有 3 门类(class) - ('111,'222,'333') ,一旦函数完成,列表中就只有“333”。

如何在不删除内部内容的情况下迭代该结构?

最佳答案

继续奥斯汀的回答,首先,如果没有 Minimal, Complete, and Verifiable example ,很难判断所有问题可能源于何处。

但是,您对 4-lists 的使用似乎导致您很难保持指针正确(正如 Austin 在他的回答中指出的那样,您将需要为每个 students 提供单独的 course 列表,并为每个 courses 提供单独的 student 列表)。我看到的困难是每次迭代学生或类(class)时都需要非常接近递归的列表数量。例如,当您迭代 slist 时,它​​会包含一个 clist course *info,而该 slist 又会再次包含 student *infoclist,例如

slist students
student info
name
id
clist course info
{ multiple inclusions of independent slist follows }
title
slist next
clist next
slist next

这同样适用于 student

clist courses
course info
title
number
slist students
{ multiple inclusions of independent clist follows }
...
clist next

现在我并不是说你不能填充足够大的内存块并用正确的指针地址填充每个指针地址并完成此操作,而是购买阿司匹林公司的股票......

为什么不解决一些令人头痛的问题并用 2 个结构重新布局,例如:

typedef struct student {
char *name;
int id;
struct course *courses;
} student;

typedef struct course {
char *title;
int number;
struct student *students;
struct course *next;
} course;

现在您仍然会遇到同样的问题,必须使用单独的 course 列表构建每个 course 节点,并且您仍然必须使用单独的 student 列表构建每个 ojit_code 节点,但是您将大大减少指针的数量需要通过这样做进行管理。

如果您发布 MCVE,我很乐意为您提供进一步帮助。

关于c - 迭代链表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43689089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com