#c #list #struct
Вопрос:
У меня есть этот код ниже, и я хочу, чтобы переменные данные в структуре содержали другую структуру. Например, я хочу, чтобы мои данные были 3 другими переменными (источник, место назначения и время), чтобы каждый узел из списка занимал 3 разные позиции. Как я могу сделать это возможным?
typedef struct Node { char data; struct Node *next; } Node; int push_front( Node **head, char data ) { Node *new_node = malloc( sizeof( Node ) ); int success = new_node != NULL; if ( success ) { new_node-gt;data = data; new_node-gt;next = *head; *head = new_node; } return success; }
Комментарии:
1. Просто добавьте элемент, который является структурой. Но почему это должна быть вложенная структура? Просто дайте вашей структуре больше участников.
2. @Cheatah разве это не означает, что для каждого нового участника в моей структуре я буду брать новый узел?
Ответ №1:
Несколько способов сделать это, вы можете добавить участников в структуру узла (лучшее решение в вашем случае) :
typedef struct Node { int src, dst, time; struct Node *next; } Node;
Превращение ваших данных в структуру :
struct Data { int src, dst, time; }; typedef struct Node { struct Data data; /* can also be a pointer */ struct Node *next; };
Создание структуры внутри вашей структуры :
typedef struct Node { struct { int src, dst, time; } data; struct Node *next; };
Вы можете сделать структуру данных анонимной (педантичный ansi будет жаловаться) и получить доступ к членам, как в первом примере, когда они не были инкапсулированы. Это более полезно делать, когда у вас есть объединение внутри структуры.
typedef struct Node { struct { int src, dst, time; }; struct Node *next; };
Теперь ваша функция может выглядеть как одна из следующих :
int push_front( Node **head, int src, int dst, int time ); int push_front( Node **head, struct Data data /* can be a pointer */); int push_front( Node **head, struct {int src, dst, time;} data );
Комментарии:
1. Это было так полезно, спасибо, что уделили мне время! Я попробую их все, чтобы понять, как я могу справиться лучше всего.
2. как я могу отобразить список после вставки узлов?