【发布时间】:2021-12-31 04:36:54
【问题描述】:
struct clist {
int pos;
char* color;
struct clist *next;
};
typedef struct clist sl_clist;
sl_clist *head = NULL;
sl_clist* link[5];
所以我试图创建多个单链循环列表并将它们放入堆栈中,每个列表都将具有相同类型的数据。在这种情况下,我将堆栈用作数组。但我就是不知道如何从单一类型创建多个链表。我是一名学生,所以我对 C 不是很有经验。谢谢提前帮助。
void create_list (int N, sl_clist* head){
int i;
sl_clist *new;
sl_clist *old;
if(N == 0){
head = NULL;
}
srand(time(0));
for(i = 0; i < N; i++){
new = (sl_clist*)malloc(sizeof(sl_clist));
if(i == 0){
head = new;
new -> color = color[(rand()%10)];
new -> pos = pos[i];
new -> next = head;
}
else{
new -> color = color[(rand()%10)];
new -> pos = pos[i];
old -> next = new;
new -> next = head;
}
old = new;
}
}
我也尝试过创建多个“头”变量,但由于某种原因,当我在这个函数中使用它们时(想象一下有颜色和位置的数组),它们总是返回 NULL。
【问题讨论】:
-
问:如何创建多个链表...并将它们放入堆栈?一个简单的。
sl_clist* link[]中的每个元素都不是单个变量sl_clist *head,而是不同列表的头部。另外:您可能希望将struct clist {}和typedef struct clist sl_clist组合到同一个声明中。向下滚动这些示例以查看如何操作:educative.io/edpresso/how-to-use-the-typedef-struct-in-c -
@paulsm4 好的,所以我实际上已经尝试为多个头创建多个变量,但这次我在我在这里的函数中使用它们时遇到了麻烦。出于某种原因,当我简单地使用变量的名称而不是将其用作参数时,它可以工作。但是当我将它用作参数时,它保持为 NULL,不会创建列表。也许我没有使用正确的参数类型?
-
您似乎对解决方案没有抽象概念。在编写代码之前,您需要考虑算法和数据结构。代码只是最后一步。如果您对抽象部分很清楚,那么参数类型之类的东西就会自然而然地出现。所以这是我的建议:从代码中退后一步,拿起铅笔和几张纸,在更高的层次上解决任务。
-
Singly Linked List of Integers (example) - 您可以创建任意数量的
list_t类型列表。 -
这是个问题:
void create_list (int N, sl_clist* head){}。问题:*head 仅在函数内部更新。调用者永远看不到变化。解决方案:void create_list (int N, sl_clist **head){}。这篇文章可能有助于解释:eskimo.com/~scs/cclass/int/sx8.html
标签: c