C语言中的列表
我试图将指针列表动态分配给结构指针,每个结构指针都包含一个定义如下的结构列表:C语言中的列表,c,list,memory,C,List,Memory,我试图将指针列表动态分配给结构指针,每个结构指针都包含一个定义如下的结构列表: struct node { char *text; struct node *next; }; 我也在使用typedef: typedef struct node Node; 我正在创建一个节点列表,通过声明以下内容来保存每个列表: Node **list; list = (struct node**) malloc(sizeof(struct node*) * arraySize); 在
struct node {
char *text;
struct node *next; };
我也在使用typedef:
typedef struct node Node;
我正在创建一个节点列表,通过声明以下内容来保存每个列表:
Node **list;
list = (struct node**) malloc(sizeof(struct node*) * arraySize);
在list
的每个节点上,我将创建另一个列表,如下所示:
list[i] = malloc(sizeof(struct node*) * subArraySize);
我有几个问题:
文本
数据成员如果我的问题含糊不清,请让我知道。我对这个话题的困惑使我很难恰当地表达我的问题 假设您的内存已正确分配和填充,您可以通过以下方式访问较大的
节点**
数组中每个节点*的第一个节点的文本
数据成员:
list[i]->text
但是,要回答您关于实现是否正确的问题,这并不是真的。您可能会更乐意这样做:
struct node **list;
list = (struct node**) calloc(sizeof(struct node*) * arraySize);
for (int i=0; i<arraySize; ++i) {
list[i] = (struct node*) malloc(sizeof(struct node));
list[i]->text = ""; // or whatever you want to start with
list[i]->next = NULL;
}
它还可以帮助您了解如何在链表中使用typedef
如果我在代码中犯了任何语法或语义错误,我很抱歉,我写C已经有一段时间了,我可能对如何引用struct
s有些生疏。欢迎更正。您的typedef没有任何作用。您可以使用单词“list”(以及变量名list
)来表示列表和数组。当不清楚是否有任何层正常工作时,您正在尝试使用间接塔。你必须从简单的问题开始,逐步解决复杂的问题,否则你肯定会失败。看起来你正在尝试构建一个数组,其中包含指向多个链表头的指针,对吗?第二部分,list[i]=malloc(sizeof(struct node*)*subraysize)
是一种误导,因为您提前为几个节点
分配了一个连续的内存块,而通常您可能会在创建每个节点时为其分配内存,或者至少你不会使用这种严格意义上的2d数组结构。如果你试图创建指向链表的指针的动态数组,那么第二个malloc就没有意义了。后者是一个链表,因此不需要向量分配(假设next
成员不只是为了粉饰门面或其他邪恶目的)。也就是说,您真正想要解决的问题是什么,一个带有冲突链的哈希表?
int i = index_where_you_want_to_insert;
struct node *currNode = list[i];
struct node *newNode = (struct node*) malloc(sizeof(struct node));
newNode->text = ""; // or whatever you want to start with
newNode->next = NULL;
while(currNode->next != NULL) {
currNode = currNode->next;
}
currNode->next = newNode;