home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 26
/
CD_ASCQ_26_1295.iso
/
voxrom
/
textes
/
repwin08
/
annexes
/
accroc
/
lifo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-10-01
|
2KB
|
64 lines
unit LIFO; {unit de gestion de pile}
INTERFACE
type TDonnee = integer;
type Pile = ^Tcase;
Tcase = record
n:TDonnee;
next:Pile;
end;
procedure init_pile(var p:pile); {initialisation de la pile}
{attention, l'initialisation ne vide
pas la pile, elle remet juste le
pointeur au depart...
Pour vider la pile, utiliser plusieurs
fois la procedure depile !}
function pile_vide(p:pile):boolean; {retourne true si la pile est vide}
procedure empile(var p:pile;nb:TDonnee);
{empile un élément nb au sommet de la pile p}
procedure depile(var p:pile; var nb:TDonnee;flag:boolean);
{depile un element de la pile p. Flag retourne true si l'operation a
réussi (si la pile n'était pas vide)}
IMPLEMENTATION
procedure init_pile(var p:pile);
begin
p:=nil;
end;
function pile_vide(p:pile):boolean;
begin
pile_vide:=(p=nil);
end;
procedure empile(var p:pile;nb:TDonnee);
var pile_aux:pile;
begin
new(pile_aux);
pile_aux^.n:=nb;
pile_aux^.next:=p;
p:=pile_aux;
end;
procedure depile(var p:pile; var nb:TDonnee;flag:boolean);
var pile_aux:pile;
begin
if pile_vide(p)
then flag:=false {si pile vide, on ne valide pas le flag}
else begin {SINON}
flag:=true; {on valide le flag}
pile_aux:=p; {on fait pointer pile_aux sur le sommet}
nb:=pile_aux^.n; {on extrait la donnée dans nb}
p:=pile_aux^.next;{on fait pointer p sur le deuxieme element}
dispose(pile_aux);{on supprime le premier element}
end;
end;
END.