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 >
Pascal/Delphi Source File  |  1995-10-01  |  2KB  |  64 lines

  1. unit LIFO;   {unit de gestion de pile}
  2.  
  3. INTERFACE
  4.  
  5. type TDonnee = integer;
  6.  
  7. type Pile = ^Tcase;
  8.      Tcase = record
  9.              n:TDonnee;
  10.              next:Pile;
  11.              end;
  12.  
  13. procedure init_pile(var p:pile);   {initialisation de la pile}
  14.                                    {attention, l'initialisation ne vide
  15.                                    pas la pile, elle remet juste le
  16.                                    pointeur au depart...
  17.                                    Pour vider la pile, utiliser plusieurs
  18.                                    fois la procedure depile !}
  19.  
  20. function pile_vide(p:pile):boolean; {retourne true si la pile est vide}
  21.  
  22. procedure empile(var p:pile;nb:TDonnee);
  23. {empile un élément nb au sommet de la pile p}
  24.  
  25. procedure depile(var p:pile; var nb:TDonnee;flag:boolean);
  26. {depile un element de la pile p. Flag retourne true si l'operation a
  27. réussi (si la pile n'était pas vide)}
  28.  
  29. IMPLEMENTATION
  30.  
  31. procedure init_pile(var p:pile);
  32. begin
  33.   p:=nil;
  34. end;
  35.  
  36. function pile_vide(p:pile):boolean;
  37. begin
  38.   pile_vide:=(p=nil);
  39. end;
  40.  
  41. procedure empile(var p:pile;nb:TDonnee);
  42. var pile_aux:pile;
  43. begin
  44.   new(pile_aux);
  45.   pile_aux^.n:=nb;
  46.   pile_aux^.next:=p;
  47.   p:=pile_aux;
  48. end;
  49.  
  50. procedure depile(var p:pile; var nb:TDonnee;flag:boolean);
  51. var pile_aux:pile;
  52. begin
  53.   if pile_vide(p)
  54.     then flag:=false      {si pile vide, on ne valide pas le flag}
  55.     else begin          {SINON}
  56.          flag:=true;       {on valide le flag}
  57.          pile_aux:=p;      {on fait pointer pile_aux sur le sommet}
  58.          nb:=pile_aux^.n;  {on extrait la donnée dans nb}
  59.          p:=pile_aux^.next;{on fait pointer p sur le deuxieme element}
  60.          dispose(pile_aux);{on supprime le premier element}
  61.          end;
  62. end;
  63.  
  64. END.