Creation liste bidirectionnelle en C
Résolu/Fermé
Baron13
Messages postés
3
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
3 septembre 2007
-
9 mars 2007 à 00:50
Baron13 Messages postés 3 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 3 septembre 2007 - 9 mars 2007 à 11:10
Baron13 Messages postés 3 Date d'inscription vendredi 9 mars 2007 Statut Membre Dernière intervention 3 septembre 2007 - 9 mars 2007 à 11:10
A voir également:
- Creation liste bidirectionnelle en C
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
9 mars 2007 à 02:57
9 mars 2007 à 02:57
Bon concrètement le code est sensé être identique quel que soit le logiciel dans les deux cas car c'est quelque chose de très simple.
Pour les listes simplement chainées, tu as un pointeur vers le maillon suivant et un vers la donnée du maillon (par exemple située à l'adresse "data", mais on pourrait imaginer que tu stockes directement un int par exemple).
Tout l'art de la liste simplement chainée, c'est de maintenir les pointeurs "next" de sorte à garder la chaine connexe. Dans le cas de la liste doublement chainée c'est un peu la même idée sauf que tu dois maintenir le chainage "next" et le chainage "prev"
A l'image du TP que tu as sûrement pour les listes simpement chainées, il faudra probablement crée des fonctions permettant d'ajouter/supprimer en début, milieu, et fin de liste. Mais avant d'entamer cet exercice il faut absolument que tu aies bien compris comment ça marche pour les listes simplement chainées.
Si ce sont les pointeurs qui te dérange ne perd jamais de vue que c'est juste une adresse (donc une valeur numérique). On interprète ce qui se trouve à cette adresse par rapport au type du pointeur avec l'opérateur * : exemple
Après tu peux avoir des pointeurs de pointeurs de pointeurs si ça t'amuses.
Si tu as bien compris cette notion, l'utilisation de pointeurs dans une liste devient assez naturelle...
Bonne chance
Pour les listes simplement chainées, tu as un pointeur vers le maillon suivant et un vers la donnée du maillon (par exemple située à l'adresse "data", mais on pourrait imaginer que tu stockes directement un int par exemple).
typedef struct cell{ struct cell *next; // cellule suivante void *data; // adresse de la donnée stockée dans ce maillon } cell_t; typedef cell_t * list_t;
Tout l'art de la liste simplement chainée, c'est de maintenir les pointeurs "next" de sorte à garder la chaine connexe. Dans le cas de la liste doublement chainée c'est un peu la même idée sauf que tu dois maintenir le chainage "next" et le chainage "prev"
typedef struct cell{ struct cell *prev; // cellule précédente struct cell *next; // cellule suivante void *data; } cell_t; typedef cell_t * list_t;
A l'image du TP que tu as sûrement pour les listes simpement chainées, il faudra probablement crée des fonctions permettant d'ajouter/supprimer en début, milieu, et fin de liste. Mais avant d'entamer cet exercice il faut absolument que tu aies bien compris comment ça marche pour les listes simplement chainées.
Si ce sont les pointeurs qui te dérange ne perd jamais de vue que c'est juste une adresse (donc une valeur numérique). On interprète ce qui se trouve à cette adresse par rapport au type du pointeur avec l'opérateur * : exemple
int *plop; int x = *plop;
Après tu peux avoir des pointeurs de pointeurs de pointeurs si ça t'amuses.
int ***p3; int **p2 = *p3; int *p1 = *p2; int p0 = *p1; // p0 == ***p3
Si tu as bien compris cette notion, l'utilisation de pointeurs dans une liste devient assez naturelle...
Bonne chance
9 mars 2007 à 11:10
a+