program GestionDePile;
( 1. Définition des types )
type
TPileElement = Record
Valeur : Integer;
Suivant : ^TPileElement; ( Pointeur vers l'élément suivant dans la pile )
end;
TPilePointeur = ^TPileElement; ( Pointeur vers le sommet (TOP) de la pile )
( 2. Variable pour suivre le sommet de la pile )
var
Sommet : TPilePointeur;
ResultatPop : Integer;
( ----------------------------------- )
( Procédure : Ajouter un élément (PUSH) )
( ----------------------------------- )
procedure Push(ValeurAAjouter: Integer);
var
NouveauElement: TPilePointeur;
begin
( Allouer de la mémoire pour le nouvel élément )
New(NouveauElement);
( Remplir les champs du nouvel élément )
NouveauElement^.Valeur := ValeurAAjouter;
NouveauElement^.Suivant := Sommet; ( Le nouvel élément pointe vers l'ancien sommet )
( Mettre à jour le sommet de la pile )
Sommet := NouveauElement;
writeln('PUSH: Ajout de ', ValeurAAjouter);
end;
( ----------------------------------- )
( Fonction : Retirer un élément (POP) )
( ----------------------------------- )
function Pop: Integer;
var
ElementARetirer: TPilePointeur;
begin
if Sommet = nil then
begin
writeln('Erreur: La pile est vide.');
Pop := -1; ( Valeur d'erreur conventionnelle )
end
else
begin
ElementARetirer := Sommet; ( Sauvegarder l'élément à retirer )
Sommet := Sommet^.Suivant; ( Le sommet devient l'élément suivant )
Pop := ElementARetirer^.Valeur; (* Récupérer la valeur à retourner *)
Dispose(ElementARetirer); (* Libérer la mémoire de l'ancien sommet *)
end;
end;
( ----------------------------------- )
( Programme principal )
( ----------------------------------- )
begin
Sommet := nil; ( Initialiser la pile comme vide )
writeln('--- Démarrage de la gestion de la Pile ---');
( Opérations PUSH )
Push(10);
Push(20);
Push(30);
writeln;
( Opérations POP (LIFO - Last-In, First-Out) )
ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 30 )
ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 20 )
Push(5); ( Ajout d'un nouvel élément )
writeln;
ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 5 )
ResultatPop := Pop;
writeln('POP: Retiré = ', ResultatPop); ( Doit être 10 )
writeln;
( Tentative de POP sur une pile vide )
Pop;
readln;
end.