Structures de données
Prof. M. Khalifa MANSOURI
Les listes chainées
1
Université Hassan II de Casablanca
ENSET de Mohammedia
Département Mathématiques et Informatique
Structures de données
Stocker les données
dans des structures
2
Pour stocker …
3
Utilisation des tableaux
Il faut préciser la taille du tableau (n)
Exemple: n=5
0 1 2 3 4
0 1 2 3 4 5 6
Changer la taille du tableau si nécessaire?
4
En langage C, les tableaux offrent un
moyen statique de stockage
Existe –il un nouveau moyen dynamique
de stockage ?
Une nouvelle structure
5
Objectifs recherchés :
Allouer de l’espace mémoire en fonction
du besoin.
Simuler des phénomènes du monde réel :
File d’attente dans un guichet.
Urgences dans un hôpital.
Dossiers empilés sur un bureau.
Listes chainées
6
Les listes chainées présentent un moyen
dynamique de stockage
Liste chainée
7
Une liste chainée est un ensemble d’éléments qui
constituent ses nœuds,
Au contraire des tableaux, les éléments d’une liste
chainée ne sont pas placés côte à côte.
A B C
T[1] T[2] T[3]
T
Structure tableau :
Structure liste chaînée :
A
B
&B
C
&C NULL
&A L’élément dans une LC :
- Donnée utile.
- Pointeur vers donnée suivante.
Exemple de problème à résoudre
8
Comment servir tout les éléments?
Résolution du problème
9
Principe de base
chaque élément peut avertir son suivant
Tableaux ?
1
Nombre d’éléments inconnu
méthode à écarter
Liste chainée ?
1
Méthode adoptée pour les tailles
dynamiques
Liste chainée
1
Comment utiliser les listes chainées ?
Structuration des éléments
1
Pour que chaque élément arrive à avertir un
autre élément, il faut qu’il ait son adresse
Structuration des éléments
1
Liaison entre les adresses
L’élément suivant
1
Dans une liste chainée, un élément ne voit
qu’un seul autre élément (son suivant)
Chaque élément avertit son suivant
1
Liste chainée
1
Définition :
Une structure de données composée d’éléments de
même type reliés de façon successive par des pointeurs.
A B
F
C
E
D
Liste chainée
1
Composition :
Donnée
Donnée
Donnée
Donnée
Donnée
cellule
Lien
Dans une liste chaînée les éléments sont rangés linéairement. Chaque élément
est lié à son successeur, il est donc impossible d'accéder directement à un
élément quelconque de la liste.
Cette linéarité est virtuelle.
Liste chainée
1
Repérage des cellules :
Donnée
Donnée
Donnée
Donnée
Donnée
Tête
Queue
Suivante
Précédente
Comment parcourir une liste ?
Démarche
2
Servir le premier élément
Le premier élément averti son suivant (2ème élément)
Servir le deuxième élément
Le deuxième élément averti sont suivant
….
Jusqu’à ce que ne reste aucun élément à servir
Représentation en C
2
Les éléments de la liste
…
Premier
élément
Dernier
élément
Représentation en C
2
?
Représentation en C
2
Informations
de l’élément
Adresse du
suivant
Élément
Représentation en C
2
Informations
de l’élément
Adresse du
suivant
Donnée complexe
1
2
struct element
{
type1 partie1
type2 partie2
} ;
?
?
Représentation en C
2
Informations
de l’élément
Adresse du
suivant
1
2
struct element
{
int numElement;
element *suivant;
} ;
Nous avons pris
un cas simple
Algorithmes complexes
Il reste à structurer la
liste ?
2
Représentation en C
2
…
Début
Aucun
=
Adresse de
début
=
Adresse Fin
=
null
information
@suivant
information
@suivant
information
@suivant
information
@suivant
@100 @200 @300 @700
Représentation en C
2
…
Adresse de
début
information
@200
information
@300
information
@xxx
information
@null
*p1 *p2 *p3 *pn
Pour se rappeler de toute la liste,
Il suffit de se rappeler de ……..L’adresse de début : p1
@100 @200 @300 @700
Les principales opérations sur
une liste chainée
1. Insertion
2. Affichage
3. Suppression
Liste chainée
3
Ajouter/Suppression :
Donnée
Donnée
Donnée
Donnée
Donnée
Cellule
Cellule
Cellule
Les principales opérations sur
une liste chainée
1. Insertion
2. Affichage
3. Suppression
Exemple 1
3
Construire une liste chainée (L) qui contiendra
l’ensemble d’entier {7,5,13,9}
Problème
Algorithmes complexes
Le problème de
construction d’une liste
chainée se résume en un
problème d’insertion
3
Exemple 1
3
7
@200
5
@300
13
@xxx
9
@null
*p1 *p2 *p3 *p4
@100 @200 @300 @700
*L est un pointeur sur le premier
élément de la liste (*p1)
Représentation graphique de la liste chainée
*L
Adresse du suivant
Adresse de
l’élément courant
Exemple 1
3
typedef struct element
{
int info;
element *suivant;
} Element;
La liste est représentée par *L
Element *L;
//Au début, on peut mettre
L=NULL;
Etape 1 : définition de la structure de donnée
Insertion d’un nouveau élément dans la liste
3
e1 e2 e3 e4
L
Soit L une Liste
Nouveau
NULL
Où l’insérer
Début
Milieu
Fin
Algorithmes complexes
Il faut toujours se
rappeler de L
3
Insertion d’un nouveau élément dans la liste
3
L
NULL
Au début de la liste
Créer nouveau
nouveau->suivant=L;
L=nouveau;
Insertion d’un nouveau élément dans la liste
3
e2 e3 e4e1
L
Nouveau NULL
À la fin de la liste
Créer nouveau
Aller jusqu’à la fin de la liste (position=e4)
// à l’aide d’un autre pointeur *temp pour ne pas perdre L
position->suivant=nouveau;
nouveau->suivant=NULL; // obligatoire pour indiquer la fin de la liste
Le problème revient à se positionner à position
Insertion d’un nouveau élément dans la liste
4
e2e1 e3 e4
L
Nouveau NULL
En milieu
Créer nouveau
Aller jusqu’à la position souhaitée
// à l’aide d’un autre pointeur *temp pour ne pas perdre L
//ici, position est entre e2 et e3
//ou autrement dit, entre e2 et e2->suivant
nouveau->suivant=e2->suivant;
// attention si e2 est NULL. Si c’est le cas, le problème revient à insérer à la fin
e2->suivant=nouveau;
Exemple 1: Solution
4
Pour construire une liste chainée (L) qui contiendra
l’ensemble d’entier {7,5,13,9}
Exemple 1: Solution
4
Etape 1: Définir la structure de donnée
typedef struct element
{
int info;
element *suivant;
}Element;
Exemple 1: Solution
4
Etape 2 : Insertion des éléments.
Chaque nouveau élément est inséré au début (tête
de la liste)
Exemple 1: Solution
4
int main()
{
Element *L;
L=NULL;// L ne contient aucun élément
Element *elt;
// élément 1
elt=(element*)malloc(sizeof(element));
elt->info=7;
elt->suivant=L;
L=elt;
// élément 2
elt=(element*)malloc(sizeof(element));
elt->info=5;
elt->suivant=L;
L=elt;
// élément 3
elt=(element*)malloc(sizeof(element));
elt->info=13;
elt->suivant=L;
L=elt;
// élément 4
elt=(element*)malloc(sizeof(element));
elt->info=9;
elt->suivant=L;
L=elt;
}
Exemple 1 : Solution simple
4
Element *insertDebut(Element *L, int e)
{
Element *nouveau;
nouveau =(element*)malloc(sizeof(element));
nouveau ->info = e;
nouveau -> suivant = L;
return nouveau;
}
int main()
{
Element *L;
L=NULL;// L ne contient aucun élément
L=insertDebut(L,7);
L=insertDebut(L,5);
L=insertDebut(L,13);
L=insertDebut(L,9);
}
Les principales opérations sur
une liste chainée
1. Insertion
2. Affichage
3. Suppression
Algorithmes complexes
Il faut toujours se
rappeler de L
4
Affichage des éléments de la liste
4
e1 e2 e3 e4
L
NULL
Il suffit de connaitre L …
Parcours à travers un autre pointeur qui reçoit L
Si non…
Affichage des éléments de la liste
4
Exercice 1
Ecrit une fonction qui permet d’afficher le contenu d’une Liste L
Les principales opérations sur
une liste chainée
1. Insertion
2. Affichage
3. Suppression
Algorithmes complexes
Il faut toujours se
rappeler de L
5
Affichage des éléments de la liste
5
e1 e2 e3 e4
L
NULL
Il suffit de connaitre L …
Chercher l’élément à supprimer
À
supprimer
Il se trouve où ?
Début
Milieu
Fin
Suppression d’un élément de la liste
5
Exercice 2
Ecrit une fonction ou procédure qui permet de supprimer
un élément de la liste.
Discuter tous les cas possibles
Traitement sur les listes chainées
5
Traitements relatifs à la structure :
Se positionner sur la première cellule.
Se positionner sur la dernière cellule.
Calculer la longueur d'une liste.
Reconnaître une liste vide.
Parcourir une liste.
Traitement sur les listes chainées
5
Traitements relatifs aux données :
 Modification de données.
 Visualisation de l'information enregistrée dans une
cellule.
 Visualisation de toutes les informations enregistrées.
 Suppression d'une cellule.
 Ajout d’une cellule.
Remarque : il est impossible d’accéder directement à la
position i dans une liste.
Les indices n’existe pas dans les listes chaînées
Manipulation d’une liste chainée
5
Les basiques :
Se positionner sur la première cellule :
Donnée Donnée DonnéeDonnéePP
PS
PS : *cellule
PSPP
Manipulation d’une liste chainée
5
Les basiques :
Se positionner sur la dernière cellule :
Donnée Donnée DonnéeDonnéePP
P
S
*cellule fonction lastCel (pp)
Paramètre (D) pp : *cellule
Variable ps : *cellule
Début
ps pp
tant que (pssuivant<>NULL) faire
ps  pssuivant
ftq
retourne (ps)
Fin
Manipulation d’une liste chainée
5
Les basiques :
Une liste vide est une liste chaînée qui ne contient
aucun élément :
PP
Booleen fonction estVide (pp)
Paramètre (D) pp : *cellule
Début
si pp= NULL alors
retourne vrai
sinon
retourne faux
fsi
Fin
Manipulation d’une liste chainée
5
Ajout d’un élément :
L’opération d’ajout requiert la création d’une
nouvelle cellule et son raccordement au reste de
la liste :
 Tête de liste.
 Fin de liste. Donnée
Donnée
Cellule
Cellule
Reste de
la liste
Manipulation d’une liste chainée
6
Ajout en tête :
Exemple : créer une fonction qui renvoie
un pointeur vers l’élément
ajouté en tête de liste.
Créer un élément
Affecter une valeur
Le raccorder avec la liste
Cell : cellule
Cell.valeur<-val
Cell.suivant<-pp
Manipulation d’une liste chainée
6
Ajout en fin de liste :
Créer un élément
Affecter une valeur
Mettre l’adresse de l’élément
suivant à NULL
Cell : cellule
Cell.valeur<-val
Cell.suivant<- NULL
faire pointer le dernier élément
de liste originale sur le nouvel
élément
Si (pp<> NULL) alors
ps<-pp
tant que(ps->suivant<>NULL) faire
ps<-ps->suivant
Ftq
ps->suivant &cell
Fsi
Manipulation d’une liste chainée
6
Exercice :
Coder la fonction afficher(cellule* pliste) qui
permet de parcourir une liste et d’afficher son
contenu…
procédure afficher(liste)
Paramètre (D) liste : *cellule
Variable curseur : *cellule
Début
curseur <- liste
tant que (curseur <>NULL ) faire
afficher (curseur->valeur)
curseur<-curseur->suivant
ftq
Fin
Manipulation d’une liste chainée
6
Supprimer un élément de tête :
Il s'agit là de supprimer le premier élément de la liste.
Il faudra utiliser la fonction libérer(pointeur)
Donnée
Donnée Donnée
Donnée
Manipulation d’une liste chainée
6
Supprimer un élément de tête :
Si la liste n’est pas vide
Récupérer l’adresse du
deuxième élément.
Supprimer le premier
élément
*Cellule fonction supprimeTete( liste)
Paramètre (D) liste : *cellule
Variable PS : *cellule
Début
si(liste<>NULL ) alors
PS <- liste->suivant
libérer(liste)
retourne (PS )
Sinon
retourne (NULL)
Fsi
Fin
Manipulation d’une liste chainée
6
Donnée Donnée DonnéeDonnée
Supprimer un élément en fin de liste :
Manipulation d’une liste chainée
6
Parcourir la liste
jusqu’au dernier
Rendre l’avant dernier
élément dernier.
Libérer le dernier
élément
Renvoyer pointeur vers
premier élément
*Cellule fonction supprimerFin(liste)
paramètre (D) liste : *cellule
Variable tmp, ptmp : *cellule
Début
si(liste = NULL) alors retourne NULL
si(listesuivant = NULL) alors
libérer(liste)
retourne NULL
fsi
tmp  liste
ptmp  liste
Tant que (tmp->suivant<> NULL) alors
ptmp  tmp
tmp  tmpsuivant
ftq
PtmpsuivantNULL
libérer(tmp)
retourne liste
fin
Supprimer un élément en fin de liste :
Manipulation d’une liste chainée
6
Recherche d’éléments :
Objectif : renvoyer l'adresse du premier élément trouvé
ayant une certaine valeur.
4 5 71
suivant

Cours : les listes chainées Prof. KHALIFA MANSOURI

  • 1.
    Structures de données Prof.M. Khalifa MANSOURI Les listes chainées 1 Université Hassan II de Casablanca ENSET de Mohammedia Département Mathématiques et Informatique
  • 2.
    Structures de données Stockerles données dans des structures 2
  • 3.
    Pour stocker … 3 Utilisationdes tableaux Il faut préciser la taille du tableau (n) Exemple: n=5 0 1 2 3 4 0 1 2 3 4 5 6 Changer la taille du tableau si nécessaire?
  • 4.
    4 En langage C,les tableaux offrent un moyen statique de stockage Existe –il un nouveau moyen dynamique de stockage ?
  • 5.
    Une nouvelle structure 5 Objectifsrecherchés : Allouer de l’espace mémoire en fonction du besoin. Simuler des phénomènes du monde réel : File d’attente dans un guichet. Urgences dans un hôpital. Dossiers empilés sur un bureau.
  • 6.
    Listes chainées 6 Les listeschainées présentent un moyen dynamique de stockage
  • 7.
    Liste chainée 7 Une listechainée est un ensemble d’éléments qui constituent ses nœuds, Au contraire des tableaux, les éléments d’une liste chainée ne sont pas placés côte à côte. A B C T[1] T[2] T[3] T Structure tableau : Structure liste chaînée : A B &B C &C NULL &A L’élément dans une LC : - Donnée utile. - Pointeur vers donnée suivante.
  • 8.
    Exemple de problèmeà résoudre 8 Comment servir tout les éléments?
  • 9.
    Résolution du problème 9 Principede base chaque élément peut avertir son suivant
  • 10.
    Tableaux ? 1 Nombre d’élémentsinconnu méthode à écarter
  • 11.
    Liste chainée ? 1 Méthodeadoptée pour les tailles dynamiques
  • 12.
    Liste chainée 1 Comment utiliserles listes chainées ?
  • 13.
    Structuration des éléments 1 Pourque chaque élément arrive à avertir un autre élément, il faut qu’il ait son adresse
  • 14.
  • 15.
    L’élément suivant 1 Dans uneliste chainée, un élément ne voit qu’un seul autre élément (son suivant)
  • 16.
  • 17.
    Liste chainée 1 Définition : Unestructure de données composée d’éléments de même type reliés de façon successive par des pointeurs. A B F C E D
  • 18.
    Liste chainée 1 Composition : Donnée Donnée Donnée Donnée Donnée cellule Lien Dansune liste chaînée les éléments sont rangés linéairement. Chaque élément est lié à son successeur, il est donc impossible d'accéder directement à un élément quelconque de la liste. Cette linéarité est virtuelle.
  • 19.
    Liste chainée 1 Repérage descellules : Donnée Donnée Donnée Donnée Donnée Tête Queue Suivante Précédente Comment parcourir une liste ?
  • 20.
    Démarche 2 Servir le premierélément Le premier élément averti son suivant (2ème élément) Servir le deuxième élément Le deuxième élément averti sont suivant …. Jusqu’à ce que ne reste aucun élément à servir
  • 21.
    Représentation en C 2 Leséléments de la liste … Premier élément Dernier élément
  • 22.
  • 23.
    Représentation en C 2 Informations del’élément Adresse du suivant Élément
  • 24.
    Représentation en C 2 Informations del’élément Adresse du suivant Donnée complexe 1 2 struct element { type1 partie1 type2 partie2 } ; ? ?
  • 25.
    Représentation en C 2 Informations del’élément Adresse du suivant 1 2 struct element { int numElement; element *suivant; } ; Nous avons pris un cas simple
  • 26.
    Algorithmes complexes Il resteà structurer la liste ? 2
  • 27.
    Représentation en C 2 … Début Aucun = Adressede début = Adresse Fin = null information @suivant information @suivant information @suivant information @suivant @100 @200 @300 @700
  • 28.
    Représentation en C 2 … Adressede début information @200 information @300 information @xxx information @null *p1 *p2 *p3 *pn Pour se rappeler de toute la liste, Il suffit de se rappeler de ……..L’adresse de début : p1 @100 @200 @300 @700
  • 29.
    Les principales opérationssur une liste chainée 1. Insertion 2. Affichage 3. Suppression
  • 30.
  • 31.
    Les principales opérationssur une liste chainée 1. Insertion 2. Affichage 3. Suppression
  • 32.
    Exemple 1 3 Construire uneliste chainée (L) qui contiendra l’ensemble d’entier {7,5,13,9} Problème
  • 33.
    Algorithmes complexes Le problèmede construction d’une liste chainée se résume en un problème d’insertion 3
  • 34.
    Exemple 1 3 7 @200 5 @300 13 @xxx 9 @null *p1 *p2*p3 *p4 @100 @200 @300 @700 *L est un pointeur sur le premier élément de la liste (*p1) Représentation graphique de la liste chainée *L Adresse du suivant Adresse de l’élément courant
  • 35.
    Exemple 1 3 typedef structelement { int info; element *suivant; } Element; La liste est représentée par *L Element *L; //Au début, on peut mettre L=NULL; Etape 1 : définition de la structure de donnée
  • 36.
    Insertion d’un nouveauélément dans la liste 3 e1 e2 e3 e4 L Soit L une Liste Nouveau NULL Où l’insérer Début Milieu Fin
  • 37.
    Algorithmes complexes Il fauttoujours se rappeler de L 3
  • 38.
    Insertion d’un nouveauélément dans la liste 3 L NULL Au début de la liste Créer nouveau nouveau->suivant=L; L=nouveau;
  • 39.
    Insertion d’un nouveauélément dans la liste 3 e2 e3 e4e1 L Nouveau NULL À la fin de la liste Créer nouveau Aller jusqu’à la fin de la liste (position=e4) // à l’aide d’un autre pointeur *temp pour ne pas perdre L position->suivant=nouveau; nouveau->suivant=NULL; // obligatoire pour indiquer la fin de la liste Le problème revient à se positionner à position
  • 40.
    Insertion d’un nouveauélément dans la liste 4 e2e1 e3 e4 L Nouveau NULL En milieu Créer nouveau Aller jusqu’à la position souhaitée // à l’aide d’un autre pointeur *temp pour ne pas perdre L //ici, position est entre e2 et e3 //ou autrement dit, entre e2 et e2->suivant nouveau->suivant=e2->suivant; // attention si e2 est NULL. Si c’est le cas, le problème revient à insérer à la fin e2->suivant=nouveau;
  • 41.
    Exemple 1: Solution 4 Pourconstruire une liste chainée (L) qui contiendra l’ensemble d’entier {7,5,13,9}
  • 42.
    Exemple 1: Solution 4 Etape1: Définir la structure de donnée typedef struct element { int info; element *suivant; }Element;
  • 43.
    Exemple 1: Solution 4 Etape2 : Insertion des éléments. Chaque nouveau élément est inséré au début (tête de la liste)
  • 44.
    Exemple 1: Solution 4 intmain() { Element *L; L=NULL;// L ne contient aucun élément Element *elt; // élément 1 elt=(element*)malloc(sizeof(element)); elt->info=7; elt->suivant=L; L=elt; // élément 2 elt=(element*)malloc(sizeof(element)); elt->info=5; elt->suivant=L; L=elt; // élément 3 elt=(element*)malloc(sizeof(element)); elt->info=13; elt->suivant=L; L=elt; // élément 4 elt=(element*)malloc(sizeof(element)); elt->info=9; elt->suivant=L; L=elt; }
  • 45.
    Exemple 1 :Solution simple 4 Element *insertDebut(Element *L, int e) { Element *nouveau; nouveau =(element*)malloc(sizeof(element)); nouveau ->info = e; nouveau -> suivant = L; return nouveau; } int main() { Element *L; L=NULL;// L ne contient aucun élément L=insertDebut(L,7); L=insertDebut(L,5); L=insertDebut(L,13); L=insertDebut(L,9); }
  • 46.
    Les principales opérationssur une liste chainée 1. Insertion 2. Affichage 3. Suppression
  • 47.
    Algorithmes complexes Il fauttoujours se rappeler de L 4
  • 48.
    Affichage des élémentsde la liste 4 e1 e2 e3 e4 L NULL Il suffit de connaitre L … Parcours à travers un autre pointeur qui reçoit L Si non…
  • 49.
    Affichage des élémentsde la liste 4 Exercice 1 Ecrit une fonction qui permet d’afficher le contenu d’une Liste L
  • 50.
    Les principales opérationssur une liste chainée 1. Insertion 2. Affichage 3. Suppression
  • 51.
    Algorithmes complexes Il fauttoujours se rappeler de L 5
  • 52.
    Affichage des élémentsde la liste 5 e1 e2 e3 e4 L NULL Il suffit de connaitre L … Chercher l’élément à supprimer À supprimer Il se trouve où ? Début Milieu Fin
  • 53.
    Suppression d’un élémentde la liste 5 Exercice 2 Ecrit une fonction ou procédure qui permet de supprimer un élément de la liste. Discuter tous les cas possibles
  • 54.
    Traitement sur leslistes chainées 5 Traitements relatifs à la structure : Se positionner sur la première cellule. Se positionner sur la dernière cellule. Calculer la longueur d'une liste. Reconnaître une liste vide. Parcourir une liste.
  • 55.
    Traitement sur leslistes chainées 5 Traitements relatifs aux données :  Modification de données.  Visualisation de l'information enregistrée dans une cellule.  Visualisation de toutes les informations enregistrées.  Suppression d'une cellule.  Ajout d’une cellule. Remarque : il est impossible d’accéder directement à la position i dans une liste. Les indices n’existe pas dans les listes chaînées
  • 56.
    Manipulation d’une listechainée 5 Les basiques : Se positionner sur la première cellule : Donnée Donnée DonnéeDonnéePP PS PS : *cellule PSPP
  • 57.
    Manipulation d’une listechainée 5 Les basiques : Se positionner sur la dernière cellule : Donnée Donnée DonnéeDonnéePP P S *cellule fonction lastCel (pp) Paramètre (D) pp : *cellule Variable ps : *cellule Début ps pp tant que (pssuivant<>NULL) faire ps  pssuivant ftq retourne (ps) Fin
  • 58.
    Manipulation d’une listechainée 5 Les basiques : Une liste vide est une liste chaînée qui ne contient aucun élément : PP Booleen fonction estVide (pp) Paramètre (D) pp : *cellule Début si pp= NULL alors retourne vrai sinon retourne faux fsi Fin
  • 59.
    Manipulation d’une listechainée 5 Ajout d’un élément : L’opération d’ajout requiert la création d’une nouvelle cellule et son raccordement au reste de la liste :  Tête de liste.  Fin de liste. Donnée Donnée Cellule Cellule Reste de la liste
  • 60.
    Manipulation d’une listechainée 6 Ajout en tête : Exemple : créer une fonction qui renvoie un pointeur vers l’élément ajouté en tête de liste. Créer un élément Affecter une valeur Le raccorder avec la liste Cell : cellule Cell.valeur<-val Cell.suivant<-pp
  • 61.
    Manipulation d’une listechainée 6 Ajout en fin de liste : Créer un élément Affecter une valeur Mettre l’adresse de l’élément suivant à NULL Cell : cellule Cell.valeur<-val Cell.suivant<- NULL faire pointer le dernier élément de liste originale sur le nouvel élément Si (pp<> NULL) alors ps<-pp tant que(ps->suivant<>NULL) faire ps<-ps->suivant Ftq ps->suivant &cell Fsi
  • 62.
    Manipulation d’une listechainée 6 Exercice : Coder la fonction afficher(cellule* pliste) qui permet de parcourir une liste et d’afficher son contenu… procédure afficher(liste) Paramètre (D) liste : *cellule Variable curseur : *cellule Début curseur <- liste tant que (curseur <>NULL ) faire afficher (curseur->valeur) curseur<-curseur->suivant ftq Fin
  • 63.
    Manipulation d’une listechainée 6 Supprimer un élément de tête : Il s'agit là de supprimer le premier élément de la liste. Il faudra utiliser la fonction libérer(pointeur) Donnée Donnée Donnée Donnée
  • 64.
    Manipulation d’une listechainée 6 Supprimer un élément de tête : Si la liste n’est pas vide Récupérer l’adresse du deuxième élément. Supprimer le premier élément *Cellule fonction supprimeTete( liste) Paramètre (D) liste : *cellule Variable PS : *cellule Début si(liste<>NULL ) alors PS <- liste->suivant libérer(liste) retourne (PS ) Sinon retourne (NULL) Fsi Fin
  • 65.
    Manipulation d’une listechainée 6 Donnée Donnée DonnéeDonnée Supprimer un élément en fin de liste :
  • 66.
    Manipulation d’une listechainée 6 Parcourir la liste jusqu’au dernier Rendre l’avant dernier élément dernier. Libérer le dernier élément Renvoyer pointeur vers premier élément *Cellule fonction supprimerFin(liste) paramètre (D) liste : *cellule Variable tmp, ptmp : *cellule Début si(liste = NULL) alors retourne NULL si(listesuivant = NULL) alors libérer(liste) retourne NULL fsi tmp  liste ptmp  liste Tant que (tmp->suivant<> NULL) alors ptmp  tmp tmp  tmpsuivant ftq PtmpsuivantNULL libérer(tmp) retourne liste fin Supprimer un élément en fin de liste :
  • 67.
    Manipulation d’une listechainée 6 Recherche d’éléments : Objectif : renvoyer l'adresse du premier élément trouvé ayant une certaine valeur. 4 5 71 suivant