Professional Documents
Culture Documents
Vous avez sur ce schma la reprsentation que l'on pourrait faire d'un tableau et d'une liste chane. Chacune de ces reprsentation possde ses avantages et inconvnients. C'est lors de l'criture de votre programme que vous devez vous poser la question de savoir laquelle des deux mthodes est la plus intressante :
Dans un tableau, la taille est connue, l'adresse du premier lment aussi. Lorsque vous dclarez un tableau la variable contiendra l'adresse du premier lment de votre tableau. Comme le stockage est contigu, et la taille de chacun des lments connus, il est possible d'atteindre directement la case i d'un tableau. Pour dclarer un tableau il faut connatre sa taille. Les suppressions d'un lment vont entraner, bien souvent, un dplacement de lments qui suivent pour combler ce trou. Dans une liste chane, la taille est inconnue au dpart, la liste peut avoir autant d'lments que votre mmoire le permet. Il est en revanche impossible d'accder directement l'lment i de la liste chane. Pour ce faire, il vous faudra traverser les i-1 lments prcdents de la liste. Pour dclarer une liste chane il suffit de crer le pointeur qui va pointer sur le premier lment de votre liste chane, aucune taille n'est spcifier donc. Il est possible d'ajouter, de supprimer, d'intervertir des lments dune liste chane sans avoir recrer la liste en entier mais en manipulant simplement leurs pointeurs.
Page 1 / 4
La valeur que vous voulez stocker. L'adresse de l'lment suivant s'il existe.
Donn pointeur dlments suivant
Une liste chane tant une succession des lments, dont le dernier pointe vers adresse invalide (NULL); voici une reprsentation possible :
Bien sr, ce n'est qu'une reprsentation, il se peut que les structures qui composent la liste ne soit pas places dans l'ordre en mmoire et encore moins de faon contigu. Au vu de l'utilisation des listes chanes, il se dessine clairement quelques fonctions indispensables :
Initialisation Ajout d'un lment Suppression d'un lment Accs l'lment suivant Accs au dernier lment de la liste, .
Le principal problme des listes chanes est l'absence de pointeur sur l'lment prcdent de la liste, il est donc possible de parcourir la chane uniquement du dbut vers la fin. Pour faciliter l'implmentation, nous allons faire quelques simplifications :
Sauvegarde du premier lment de la chane, ceci permet de retourner au dbut de la liste, L'ajout s'effectue la suite de l'lment spcifi en paramtre de la fonction.
Voici donc la reprsentation dfinitive de notre structure en mmoire, start reprsentent le pointeur ddi la sauvegarde du premier lment de la liste :
L=NULL ;
Page 2 / 4
Fonction
Position Premier (Liste L) { return (L) ; }
Appel
P=premier(L) ; Ou bien P=L ;
Position queue (Liste L) { Position P ; P=L ; While(Psuivant !=NULL) P= Psuivant return (P) ; } Position prcdant (Position P, Liste L) { Position q ; q=L; While (qsuivant !=P) q= qsuivant return (q) ; }
Page 3 / 4
Liste
Liste
ajouterEnFin (liste L, int valeur) { Position p,q ; q = (cellule*) malloc (sizeof (cellule)); q val = valeur; if (L == NULL) { q suivant = NULL; L=q; else { }
} return L ; }
BEN MAHMOUD Chaker Page 4 / 4