Les piles
1- Définition.
2- Utilisation.
3- Primitives de manipulation.
4- Représentation d'une pile par un tableau.
5- Représentation d'une pile par une liste chaînée.
***************************************************
1. Définition :
Pile = collection (ensemble) d'éléments gérée en LIFO (Last In First Out) – stack en anglais- Les ajouts comme les suppressions se font en tête de pile.
Seule l'information de la tête est accessible et traitable.
Exemple : piles d’assiettes ; 2. Utilisations:
Compilation, gestion des imbrications, autres ...
3. Primitives de manipulation : 1/ Tester si la pile est vide
2/ Accéder au sommet de la pile 3/Empiler un élément :push 4/ Dépiler un élément : pop
4. Représentation contiguë d’une pile :par un tableau Avantage: Les opérations de manipulation sont faciles.
Inconvénient: la hauteur est bornée (allocation statique de la mémoire) 4.1 Façon 1 :
Const tmax= 1000
Type pile=tableau [1..Tmax] d’entier ; Var p :pile ;
sp , y : entier ;
Ecrire une séquence d’instructions pour chaque opération de manipulation Réponse :
1/ Si sp=0 alors écrire (‘pile vide’) ;
2/si sp <>0 alors y := p[sp] sinon écrire (‘pile vide’) ;
3/si sp< tmax alors sp :=sp+1 ; p[sp] :=y ; sinon écrire ( ‘ pile pleine’) ; fin ; 4/si sp> 0 alors sp :=sp-1 sinon écrire(‘ pile vide’) ; Fsi ;
4.2 Façon 2 :
Const tmax=1000 ;
Type pile= enregistrement
Sp :entier ; Cont : [ 1 ..tmax] d’entier ; Fin ;
Var p : pile ; y : entier ;
Ecrire une séquence d’instructions pour chaque opération de manipulation Réponse :
1/ Si p.sp=0 alors écrire (‘pile vide’) ;
2/si p.sp <>0 alors y := p .cont [p.sp] sinon écrire (‘pile vide’) ;
3/si p. sp< tmax alors p.sp:=p.sp+1 ; p.cont[sp] :=y ; sinon écrire ( ‘ pile pleine’) ; fin ; 4/si p.sp> 0 alors p.sp :=p.sp-1 sinon écrire(‘ pile vide’) ; Fsi ;
5. Représentation d’une pile par une liste chainée : Avantage: facile et extensible .
Type pile= ^E
E= enregistrement info : entier ; Suivant : pile ; Fin
Var sp , y : pile ;x : entier ;
Ecrire une séquence d’instructions pour chaque opération de manipulation 1/ si sp= nil alors écrire ( ‘ liste vide’) ;
2/si sp<> nil alors x := sp^.v sinon écrire (‘ liste vide’) ; 3/allouer (y) ; y^info := x ; y^.suivant:= sp ; sp := y ;
4/ si sp <> nil alors x := sp^.info ; y := sp ; sp := sp^.suivant ; libérer (y) ;