Как я могу иметь структуры в узлах многих списков в c?

#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. как я могу отобразить список после вставки узлов?