Liste chainée
Fermé
amira
-
5 févr. 2015 à 00:28
jobertomeu Messages postés 1189 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 5 février 2015 - 5 févr. 2015 à 20:23
jobertomeu Messages postés 1189 Date d'inscription dimanche 19 août 2007 Statut Membre Dernière intervention 5 février 2015 - 5 févr. 2015 à 20:23
A voir également:
- Liste chainée
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste groupe whatsapp - Guide
- Liste site streaming illégal - Accueil - Services en ligne
- Liste de diffusion whatsapp - Guide
1 réponse
jobertomeu
Messages postés
1189
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
5 février 2015
86
Modifié par jobertomeu le 5/02/2015 à 20:25
Modifié par jobertomeu le 5/02/2015 à 20:25
Salut, les listes chaînées ne sont pas compliquées, il faut simplement se visualiser ça comme étant un train (pour reprendre ton exemple).
Chaque maillon de ta liste correspondra à un wagon, chaque contenu d'un wagon est représenté par une structure qui contiendra les éléments, le tout est régie par un "moule" qui contiendra un pointeur sur le wagon d'après :
Une fois que tu as fais ta structure qui représentera un wagon, il te suffit juste de coder les fonctions pour utiliser un système de liste chaînée.
La première chose que tu dois faire, c'est déclarer ta liste chainée :
Tu va donc devoir créer une fonction te permettant d'ajouter un élément. Celle ci prendra en paramètre, un pointeur sur ta liste, et les 3 paramètres correspondants à un nouveau maillon :
Pour terminer, une petite fonction de parcours de ta liste et d'affichage de son contenu :
Je te laisse faire la suite, les deux examples et la structure à suivre étant donnée, je pense que en comprenant correctement le code, tu devrais réussir à écrire les autres fonctions que tu désires.
Cet exemple concerne une liste simplement chaînée, il existe aussi les listes doublement chaînées qui contiennent un second pointeur "prev" représentant le maillot d'avant. Puis il a les listes doublement chaînées circulaires, il s'agit simplement d'une liste doublement chaînée mais le "next" du dernier maillon pointe sur le premier maillon de la liste et donc le "prev" du premier maillon pointe sur le dernier maillon de la liste.
Si tu as la moindre question n'hésites pas ! :)
Le code n'a pas été testé mais devrait fonctionner ;)
Chaque maillon de ta liste correspondra à un wagon, chaque contenu d'un wagon est représenté par une structure qui contiendra les éléments, le tout est régie par un "moule" qui contiendra un pointeur sur le wagon d'après :
typedef struct s_node { int numero; int type; int etat; } t_elem; typedef struct s_list { void *next; t_elem *node; } t_node;
Une fois que tu as fais ta structure qui représentera un wagon, il te suffit juste de coder les fonctions pour utiliser un système de liste chaînée.
La première chose que tu dois faire, c'est déclarer ta liste chainée :
t_node *list = malloc(sizeof(*list)); list->node = NULL; list->next = NULL;
Tu va donc devoir créer une fonction te permettant d'ajouter un élément. Celle ci prendra en paramètre, un pointeur sur ta liste, et les 3 paramètres correspondants à un nouveau maillon :
void add_elem(t_node *list, int numero, int type, int etat) { t_elem *new = malloc(sizeof(*new)); t_node *tmp = list; new->numero = numero; new->type = type; new->etat = etat; while (tmp->next) tmp = tmp->next; if (!tmp->node) { tmp->node = new; } else { tmp->next = malloc(sizeof(t_node)); tmp->next->next = NULL; tmp->next->node = new; } }
Pour terminer, une petite fonction de parcours de ta liste et d'affichage de son contenu :
void show_list(t_node *list) { t_node *tmp = list; while (tmp) { printf("Numero :\t%d\n", tmp->node->numero); printf("Type :\t%d\n", tmp->node->type); printf("Etat :\t%d\n", tmp->node->etat); printf("-------------------\n"); tmp = tmp->next; } }
Je te laisse faire la suite, les deux examples et la structure à suivre étant donnée, je pense que en comprenant correctement le code, tu devrais réussir à écrire les autres fonctions que tu désires.
Cet exemple concerne une liste simplement chaînée, il existe aussi les listes doublement chaînées qui contiennent un second pointeur "prev" représentant le maillot d'avant. Puis il a les listes doublement chaînées circulaires, il s'agit simplement d'une liste doublement chaînée mais le "next" du dernier maillon pointe sur le premier maillon de la liste et donc le "prev" du premier maillon pointe sur le dernier maillon de la liste.
Si tu as la moindre question n'hésites pas ! :)
Le code n'a pas été testé mais devrait fonctionner ;)