如何正确创建链表

时间:2011-07-18 20:44:15

标签: c

// creating a struct to store number of cd's, titles, and count
struct CD_type_node
{
    int cd_number;
    char title[20];
    int count;
    struct CD_type_node* next;
};

struct CD_type_node* mylist = NULL; // declaring a struct of type CD_type_node
struct CD_type_node* header;// head pointer for accessing linked list
header = NULL;

header = malloc(sizeof(struct mylist));
header = mylist;

while(header != NULL)
{
    header = header->next;
}

有人可以告诉我如何正确创建链接列表以及如何动态分配内存,因为我收到错误:“将”sizeof“无效应用于不完整的结构mylist

3 个答案:

答案 0 :(得分:3)

你的问题在这里

header = malloc(sizeof(struct mylist));

因为mylist是类型为struct CD_type_node*的变量,所以

header = malloc(sizeof(*mylist));

很好

header = malloc(sizeof(struct CD_type_node));

但是struct mylist是错误的:它没有命名可以从中提取类型的类型或变量。

答案 1 :(得分:2)

您需要使用sizeof(struct CD_type_node)

答案 2 :(得分:2)

我将节点创建提取为这种形式的函数:

void AddNode(struct CD_type_node **head)
{
    struct CD_type_node *newNode = malloc(sizeof(struct CD_type_node));
    newNode->next = *head;
    *head = newNode;
}

为方便起见,您可能希望传入结构中的其他字段并获取此例程以使用这些值填充新节点。但是这个例程让你了解如何进行分配和下一个指针代码。