Vous êtes sur la page 1sur 2

Petite Révision sur les Listes (TD)

La taille du tableau est attribuée par prévision. La réservation de l’espace mémoire pour un tableau
se fait au moment de la compilation et reste fixe pendant l’exécution.
La réservation de l’espace mémoire pour les éléments d’une liste se fait au moment de l’exécution
et on peut créer ou supprimer des éléments autant que l’on veut et à n’importe quel moment.
Une liste = est un ensemble de maillons reliés entre eux (un maillon= enregistrement avec un pointeur)

0) Il y a 5 types d’opérations élémentaires qu’on peut effectuer dans les listes :


a) Création d’un nouveau maillon par un pointeur P avec la primitive : Allouer(P);
b) Suppression d’un maillon pointé par P par la primitive : Libérer(P); (c’est le maillon qui est
supprimé et non pas le pointeur).
c) Affectation d’une valeur à un maillon pointé par P, par exemple : P^.valeurx;
(On doit avoir le champ valeur d’un maillon pointé par un pointeur dans la partie gauche de
l’affectation, et une variable (ou une valeur) ayant le type de la valeur du maillon à droite de
l’affectation).
d) Affectation ou modification du suivant d’un maillon pointé par P par l’adresse d’un autre
maillon, ou la valeur Nil, par exemple : P^.suivantQ; , P^.suivantQ^.suivant; , ou
P^.suivantNil; dans ce cas le chainage du maillon pointé par P et changé vers un autre maillon
ou supprimé complètement.
(On doit avoir le champ suivant d’un maillon pointé par un pointeur dans la partie gauche de
l’affectation, et une adresse à droite de l’affectation).
e) Modification de l’adresse contenue dans un pointeur P par l’adresse se trouvant dans un
autre pointeur, ou la valeur Nil, par exemple : PQ;, PQ^.suivant;, ou PNil; dans ce cas il n’y
a pas une modification du chainage mais juste un repositionnement du pointeur P vers un autre
maillon ou le libérer complètement (P n’est pas supprimé).
(on doit avoir un pointeur dans la partie gauche de l’affectation et une adresse à droite de
l’affectation).

1) Traiter l’exemple de l’exercice 1 de la série 9 :

***Quelques traitements sur les listes***


2) Affichage :
PL;
Tant que (P<>Nil) faire
Ecrire(P^.valeur);
PP^.suivant;
Fait;

3) Calcul de la somme :
PL; S0;
Tant que (P<> Nil) faire
SS+P^.valeur;
PP^.suivant;
Fait;

Page 1 sur 2
Petite Révision sur les Listes (TD)
4) Modifier la valeur du premier élément :
Ecrire(“donner un nombre“); lire(x);
L^.valeurx;

5) Modifier la valeur du dernier élément :


Ecrire(“donner un nombre“); lire(x);
PL;
Tant que(P^.suivant<>Nil) faire
PP^.suivant;
fait;
P^.valeurx;

6) Supprimer le premier élément d’une liste non vide :


PL;
LL^.suivant;
libérer(P);

7) Supprimer le dernier élément dans une liste non vide :


Si (L^.suivant=Nil) alors {la liste contient un seul élément}
libérer(L); LNil;
Sinon
PL;
Tant que(P^.suivant<>Nil) faire
QP; PP^.suivant;
fait;
Q^.suivantNil; libérer(P);
finsi;

8) Ajouter un élément au début : sera traité dans l’exo 3 de la série


9) Ajouter un élément à la fin d’une liste non vide : sera traité dans l’exo 3 de la série

10) La recherche : il y a trois méthodes :


a) avec une variable booléenne
b) avec un compteur
c) avancer tant que la valeur est différente de la valeur recherchée.

existefaux; nb0; pL;


pL; pL; tant que (p<>Nil) et (p^.valeur<>val)
tant que (p<>Nil) et (existe=faux) tant que (p<>Nil) faire faire
faire si (p^.valeur=val) alors pp^.suivant;
si (p^.valeur=val) alors nbnb+1; Fait;
existevrai; finsi; Si (p<>Nil) alors
sinon pp^.suivant; pp^.suivant; Ecrire(‘’ val existe’’);
finsi; Fait; Sinon
Fait; Si (nb>0) alors Ecrire(‘’val n’existe pas‘’);
Si (existe=vrai) alors Ecrire(‘’ val existe’’); Finsi;
Ecrire(‘’ val existe’’); Sinon
Sinon Ecrire(‘’val n’existe pas‘’);
Ecrire(‘’val n’existe pas‘’); Finsi;
Finsi;

Page 2 sur 2