Vous êtes sur la page 1sur 3

LISTES CHAINs

La notion de structure autorferrentielle


Une structure autorferrentielle (parfois appele structure rcursive) correspond une structure dont au moins un des champs contient un pointeur vers une structure de mme type. De cette faon on cre des lments (appels parfois noeuds ou liens) contenant des donnes, mais, contrairement un tableau, celles-ci peuvent tre parpilles en mmoire et relies entre elles par des liens logiques (des pointeurs), c'est--dire un ou plusieurs champs dans chaque structure contenant l'adresse d'une ou plusieurs structures de mme type. Lorsque la structure contient des donnes et un pointeur vers la structure suivante on parle de liste chane Lorsque la structure contient des donnes, un pointeur vers la structure suivante, et un pointeur vers la structure prcdente on parle de liste chane double Lorsque la structure contient des donnes, un pointeur vers une premire structure suivante, et un pointeur vers une seconde, on parle d'arbre binaire

Qu'est-ce qu'une liste chane ?


Une liste chane est une structure comportant des champs contenant des donnes et un pointeur vers une structure de mme type. Ainsi, la structure correspondant une liste chane contenant une chane de 15 caractres et un entier ressemble ceci :
struct Nom_de_la_liste { char Chaine[16]; int Entier; struct Nom_de_la_liste * pSuivant; };

On reprsente gnralement cette structure de la manire suivante : Chane Entier Pointeur vers suivant Une liste chane se reprsente donc de la faon suivante :

En ralit la dclaration de la structure et la rcursivit de celle-ci grce des pointeurs est ncessaire car cela cre une chane d'enregistrements lis par des liens logiques, mais cela n'est pas suffisant. En effet, il est ncessaire de conserver une trace du premier enregistrement afin de pouvoir accder aux autres, c'est pourquoi un pointeur vers le premier lment de la liste est indispensable. Ce pointeur est appel pointeur de tte. D'autre part, tant donn que le dernier enregistrement ne pointe vers rien, il est ncessaire de donner son pointeur la valeur NULL :

LISTES CHAINs

Pour crer une liste chane en langage C, il s'agit dans un premier temps de dfinir la structure de donnes, ainsi qu'un pointeur vers une structure du type de celle dfinie prcdemment, afin de pointer vers la tte de la liste, c'est--dire le premier enregistrement :
struct Liste { char Chaine[16]; struct Liste * pSuivant; }; struct Liste *Nouveau; struct Liste *Tete; Tete = NULL;

Ajout d'un premier lment


Une fois la structure et les pointeurs dfinis, il est possible d'ajouter un premier maillon la liste chane, puis de l'affecter au pointeur Tete. Pour cela il est ncessaire : d'allouer la mmoire ncessaire au nouveau maillon grce la fonction malloc, selon la syntaxe suivante :
Nouveau = (Liste*)malloc(sizeof(struct Liste));

d'assigner au champ pointeur du nouveau maillon, la valeur du pointeur vers le maillon de tte :
Nouveau->pSuivant = Tete;

dfinir le nouveau maillon comme maillon de tte :


Tete = Nouveau;

Il est conseill de tester la valeur renvoye en retour par la fonction malloc() afin de savoir si l'allocation dynamique de mmoire s'est droule correctement.

Ajout d'un lment en fin de liste


L'ajout d'un lment la fin de la liste chane est similaire, la diffrence prs qu'il faut dfinir un pointeur (appel gnralement pointeur courant) afin de parcourir la liste jusqu' atteindre le dernier maillon (celui dont le pointeur possde la valeur NULL). Les tapes suivre sont donc : la dfinition d'un pointeur courant :
struct Liste * pCourant;

LISTES CHAINs
le parcours de la liste chane jusqu'au dernier noeud :
if (Tete != NULL) { pCourant = Tete; while (pCourant->pSuivant != NULL) pCourant = pCourant->pSuivant; }

l'allocation de mmoire pour le nouvel lment :


Nouveau = (Liste*)malloc(sizeof(struct Liste));

faire pointer le pointeur courant vers le nouveau noeud, et le nouveau noeud vers NULL :
pCourant->pSuivant = Nouveau; Nouveau->pSuivant = NULL;

Qu'est-ce qu'une liste chane double ?


Une liste chane double est base sur le mme principe que la liste chane simple, la diffrence prs qu'elle contient non seulement un pointeur vers le maillon suivant mais aussi un pointeur vers le maillon prcdent, permettant de cette faon le parcours de la liste dans les deux sens. Ainsi, la structure correspondant une liste chane double contenant une chane de 15 caractres et un entier ressemble ceci :
struct Liste { char Chaine[16]; int Entier; struct Liste * pSuivant; struct Liste * pPrecedent };

On reprsente gnralement cette structure de la manire suivante : Donnes Pointeur vers suivant Pointeur vers prcdent Une liste chane double se reprsente donc de la faon suivante :

Vous aimerez peut-être aussi