как правильно создать связанный список - PullRequest
1 голос
/ 19 июля 2011
// 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 "к неполному struct mylist

Ответы [ 3 ]

3 голосов
/ 19 июля 2011

Ваша проблема здесь

header = malloc(sizeof(struct mylist));

потому что mylist - это переменная с типом struct CD_type_node*, поэтому

header = malloc(sizeof(*mylist));

отлично, как есть

header = malloc(sizeof(struct CD_type_node));

но struct mylist неверно: в нем не указывается ни тип, ни переменная, из которой можно извлечь тип.

2 голосов
/ 19 июля 2011

Я бы выделил создание узла в функцию такого вида:

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

Для удобства вы, вероятно, захотите передать другие поля в структуре и заставить эту подпрограмму заполнить новый узел этими значениями. Но эта процедура дает вам представление о том, как выполнить выделение и следующий код указателя.

2 голосов
/ 19 июля 2011

Вам нужно использовать sizeof(struct CD_type_node).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...