Creation liste bidirectionnelle en C
Résolu
Baron13
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Baron13 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Baron13 Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Salut à tous!!
Je vous explique mon gros problème:
Je ne métrise pas le principe de listes
chez moi j'utilise DEV C++ mais en cours j'utilise TC de borland.
Si je comprend bien, il y a une differance entre ces 2 logiciels.
Je dois rendre un TP Mardi.
Je ne demande pas une aide totale mais une piste sure a partir de laquelle je pourrais m'appuyer permettant de creer une liste doublement chainee qui accepte un nombre d'enregistrement au choix de l'utilisateur contenant juste un entier.
Merci pour tout, a+.
Je vous explique mon gros problème:
Je ne métrise pas le principe de listes
chez moi j'utilise DEV C++ mais en cours j'utilise TC de borland.
Si je comprend bien, il y a une differance entre ces 2 logiciels.
Je dois rendre un TP Mardi.
Je ne demande pas une aide totale mais une piste sure a partir de laquelle je pourrais m'appuyer permettant de creer une liste doublement chainee qui accepte un nombre d'enregistrement au choix de l'utilisateur contenant juste un entier.
Merci pour tout, a+.
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 site web - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
1 réponse
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
a+