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   -
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 33769 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 
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   Statut Membre Dernière intervention  
 
Merci pour le coup de pouce je commence de suite à bosser sur le sujet je te tiens au courant.
a+
0