unit u_pile;
interface
type
liste = ^maillon;
type_elts = integer;
maillon = record
suivant: liste;
val: type_elts;
end;
pile = liste;
{ Ces fonctions
et prcedure sont utilisables par le programme appelant
l'unite. }
procedure pile_init (var p: pile);
function est_vide (p: pile): boolean;
function depile (var p: pile): type_elts;
procedure empile (var p: pile; i: type_elts);
function longueur_pile (p: pile): integer;
procedure parcours_pile (p: pile);
procedure supprime_pile (p: pile);
{ il n'y a pas
de procédure est_pleine parcequ'il n'y a pas de
dimension }
{ fixer, le nombre d'élément de la liste
dépend de la mémoire. }
{ contact: http://www.Software-DS.com }
implementation
{ Les fonctions
et procedures qui suivent sont utilisees par l'unite et
seulement par elle }
{ Ces fonctions sont cachees, ou protegees ! elles ne
peuvent par etre utilisees par le programme appelent
l'unitee ! ! ! }
procedure init_liste (var
l: liste);
begin
l := nil;
end; { Fin de
'init' }
function vide_liste (l: liste): boolean;
begin
vide_liste := (l = nil); {
renvoie true si la liste est vide }
end; {
Fin de 'vide_liste' }
procedure insere_tete_liste (elt: type_elts; var l:
liste);
var
p: liste;
begin
p := l;
new(l);
l^.val := elt;
l^.suivant := p;
end; { Fin de
'insere_tete_liste' }
procedure parcours_liste (l: liste);
begin
if not vide_liste(l) then
begin
parcours_liste(l^.suivant);
writeln(l^.val : 3);
end;
end; { Fin de
'parcours_liste' }
procedure super_tete (var l: liste);
var
p: liste;
begin
if l = nil then
writeln('Votre liste est vide, impossible de supprimer la
tete')
else
begin
p := l;
l := l^.suivant;
dispose(p);
end;
end; { Fin de
'super_tete' }
procedure supprime_liste (var l: liste);
begin
if l^.suivant = nil then {
On doit donc remonter jusqu'au premier }
begin
supprime_liste(l^.suivant);
dispose(l);
end;
end; { Fin de
'supprime_liste' }
function longueur_liste (l: liste): integer;
begin { On
considere la liste non-nulle }
if vide_liste(l) then
longueur_liste := 0
else
begin
if l <> nil then
begin
if l = nil then
longueur_liste := 0
else
longueur_liste := 1 + longueur_liste(l^.suivant);
end;
end;
end; { Fin de
'longueur_liste' }
function dernier_liste (l: liste): liste;
begin
if vide_liste(l) then
dernier_liste := nil
else
begin
if l^.suivant <> nil then
dernier_liste := dernier_liste(l^.suivant)
else
dernier_liste := l;
end;
end; { Fin de
'dernier_liste' }
procedure inser_classe_elt_liste (i: type_elts; var
l: liste);
var
p, r: liste;
begin
if vide_liste(l) then
begin
insere_tete_liste(i, l);
end
else if (l^.val > i) then
inser_classe_elt_liste(i, l^.suivant)
else
begin
new(p);
p^.val := l^.val;
l^.val := i;
p^.suivant := l^.suivant;
l^.suivant := p;
end;
end; { Fin de
'inser_classe_elt_liste' }
procedure supper_elt_liste (i: type_elts; var l:
liste);
var
p, q: liste;
begin
if vide_liste(l) then
begin
writeln('Votre liste est vide.');
readln; { pause }
end
else if (l^.val > i) then
begin
if l^.suivant <> nil then
supper_elt_liste(i, l^.suivant)
else
writeln('La valeur ', i : 2, ' n''est pas dans la
liste');
end
else if (l^.val = i) then
begin
p := l^.suivant;
q := l;
l := p;
p := q;
dispose(p);
end;
end; { Fin de
'supper_elt_liste' }
{ Fin des fonctions et procedures cachees ;-) }
procedure pile_init (var p: pile);
begin
init_liste(p);
end; { Fin de
'pile_init' }
function est_vide (p: pile): boolean;
begin
est_vide := vide_liste(p);
end; { Fin de
'est_vide' }
function depile (var p: pile): type_elts;
begin
depile := p^.val;
super_tete(p);
end; { Fin de
'depile' }
procedure empile (var p: pile; i: type_elts);
begin
insere_tete_liste(i, p);
end; { Fin de
'empile' }
function longueur_pile (p: pile): integer;
begin
longueur_pile := longueur_liste(p);
end; { Fin de
'longueur_pile' }
procedure parcours_pile (p: pile);
begin
parcours_liste(p);
end; { Fin de
'parcours_pile' }
procedure supprime_pile (p: pile);
begin
supprime_liste(p);
end; { Fin de
'parcours_pile' }
{ ©2001 All
Rights Reserved to http://www.Software-DS.com
18/12/01 }
end.
|