Plan Strutures de données, IMA S6 Variantes des listes haînées N. Devésa, Polyteh Lille et A. Miné, ÉNS Laure Gonnord http://laure.gonnord.org/pro/teahing/ Laure.Gonnord@polyteh-lille.fr Université Lille 1 - Polyteh Lille Février 2011 1 Liste ave sentinelle 2 Struture Liste ave sentinelle Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 2 / 14 Liste ave sentinelle Listes ave sentinelle 1 Liste ave sentinelle 2 Idée : ajout d une ellule sentinelle en tête de liste : head->next pointe sur la première ellule de la liste, head->data n est pas utilisé, toutes les fontions prennent en argument un pointeur vers la sentinelle. Avantage : simplifie la gestion des as limites : as où la liste est vide, (la liste ontient toujours au moins une ellule) as où le premier élément de la liste est modifié. (head->next est modifié, pas de tête de liste à retourner) Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 3 / 14 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 4 / 14
Liste ave sentinelle Illustration d une liste ave sentinelle head 12 43 27 9 Une ellule est toujours définie omme ei : Struture Cellule valeur : Entier suivant : pointeur de Cellule FStrut Liste ave sentinelle sur les listes ave sentinelle - 1 Fontion reerliste() :pointeur de Cellule L: p :pointeur de Cellule p (pointeur de Cellule) allouer() p.suivant Retourner p FFontion Ation insereteteliste(hd,elem) D: hd :pointeur de Cellule D: elem :Int FAtion Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 5 / 14 Liste ave sentinelle Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 6 / 14 sur les listes ave sentinelle - 2 Ation inserefinliste(hd,elem) D: hd :pointeur de Cellule D: elem :Int 1 Liste ave sentinelle 2 Struture FAtion Conaténation : f TD. Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 7 / 14 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 / 14
Struture Struture Illustration d une liste doublement haînée Liste doublement haînée = on maintient : un pointeur vers la ellule suivante, un pointeur vers la ellule préédente. head Délaration de type ellule : Struture Cellule valeur : Entier suiv : pointeur de Cellule pre : pointeur de Cellule FStrut strut ell { strut ell* next; strut ell* ; int data; }; 12 43 27 9 head pointe vers la première ellule, ->next= pour la dernière ellule, sinon ->next-> existe ->= pour la première ellule, sinon ->->next existe Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 9 / 14 Insertion dans une liste doublement haînée - 1 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 10 / 14 Insertion dans une liste doublement haînée - 1 Insère une ellule ave l élément elem(ii ) après. Insère une ellule ave l élément elem(ii ) après. Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 11 / 14 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 11 / 14
Insertion dans une liste doublement haînée - 1 Insertion dans une liste doublement haînée - 1 Insère une ellule ave l élément elem(ii ) après. Insère une ellule ave l élément elem(ii ) après. Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 11 / 14 Insertion dans une liste doublement haînée - 1 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 11 / 14 Insertion dans une liste doublement haînée - 2 Insère une ellule ave l élément elem(ii ) après. oût onstant, sans ompter le alul de, ne marhe pas pour insérer en première position, pour permettre l insertion en dernière position, on hange quoi? Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 11 / 14 Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 12 / 14
Insertion dans une liste doublement haînée -3 Insère une ellule ave l élément elem(ii ) avant next. void insere_avant(strut ell* next, int elem) { } strut ell * = mallo(...); ->data = elem; -> = next->; next-> = ; ->->next = ; ->next = next; Remarques : on a simplement inversé les mots et next, ne marhe pas pour insérer en dernière position, failement modifiable pour permettre l insertion en première position. Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 13 / 14 Comparaison des types de listes vs. listes simplement haînées : on doit maintenir deux pointeurs par ellule au lieu d un : haque opération est légèrement plus oûteuse, plus omplexe, risques de bug arus, ertaines opérations sont plus failes. (e.g., parours en arrière, insertion avant une ellule) Shéma lassique en informatique : l ajout de redondane permet des oui aluls plus rapides, au prix d une maintenane plus omplexe. Variantes : listes ave sentinelles, listes irulaires, listes ave un pointeur de fin,... Coût des listes ave pointeur de fin? Laure Gonnord (Lille1/Polyteh Lille) SD IMA S6 Variantes des listes haînées Février 2011 14 / 14