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
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+.
A voir également:

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
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).
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
0
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
Merci pour le coup de pouce je commence de suite à bosser sur le sujet je te tiens au courant.
a+
0