Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. UNIT uPila;
  2.  
  3. INTERFACE
  4. USES uElem;
  5.  
  6.     TYPE
  7.         TPila = ^TNodo;
  8.  
  9.         TNodo = RECORD
  10.             info:TElem;
  11.             sig:TPila;
  12.         END;
  13.  
  14.     PROCEDURE CrearPilaVacia (VAR pila:TPila);
  15.  
  16.     PROCEDURE Apilar (VAR pila:TPila; elem:TElem);
  17.  
  18.     PROCEDURE Desapilar (VAR pila:TPila);
  19.  
  20.     PROCEDURE BorrarPila (VAR pila:TPila);
  21.  
  22.     PROCEDURE Cima (pila:TPila; VAR primer:TElem);
  23.  
  24.     FUNCTION EsPilaVacia (pila:TPila):boolean;
  25.  
  26.     PROCEDURE CopiarPila (pila:TPila ;VAR pilaOut:TPila);
  27.  
  28.  
  29.  
  30.  
  31. IMPLEMENTATION
  32.  
  33.     PROCEDURE CrearPilaVacia (VAR pila:TPila);
  34.         BEGIN
  35.             pila := NIL;
  36.         END;
  37.  
  38.     PROCEDURE Apilar (VAR pila:TPila; elem:TElem);
  39.         VAR
  40.             aux:TPila;
  41.         BEGIN
  42.             new(aux);
  43.             Asignar(aux^.info,elem);
  44.             aux^.sig := pila;
  45.             pila := aux;
  46.         END;
  47.  
  48.     PROCEDURE Desapilar (VAR pila:TPila);
  49.         VAR
  50.             aux:TPila;
  51.         BEGIN
  52.             IF NOT(EsPilaVacia(pila)) THEN
  53.                 BEGIN
  54.                     aux := pila;
  55.                     pila := pila^.sig;
  56.                     dispose(aux);
  57.                 END;
  58.         END;
  59.  
  60.     PROCEDURE BorrarPila (VAR pila:TPila);
  61.         BEGIN
  62.             IF NOT(EsPilaVacia(pila)) THEN
  63.                 WHILE pila<>NIL DO
  64.                     Desapilar(pila);
  65.         END;
  66.  
  67.     PROCEDURE Cima (pila:TPila; VAR primer:TElem);
  68.         BEGIN
  69.             IF NOT(EsPilaVacia(pila)) THEN
  70.                 primer := pila^.info;
  71.         END;
  72.  
  73.     FUNCTION EsPilaVacia (pila:TPila):boolean;
  74.         BEGIN
  75.             EsPilaVacia := (pila = NIL);
  76.         END;
  77.  
  78.     PROCEDURE CopiarPila (pila:TPila ;VAR pilaOut:TPila);
  79.         VAR
  80.             aux,aux2:TPila;
  81.         BEGIN
  82.             WHILE pila<>NIL DO
  83.                 BEGIN
  84.                     aux := pilaOut;
  85.  
  86.                     IF aux=NIL THEN
  87.                         Apilar(pilaOut,pila^.info)
  88.                     ELSE
  89.                         BEGIN
  90.                             WHILE aux^.sig<>NIL DO
  91.                                 aux := aux^.sig;
  92.  
  93.                             new(aux2);
  94.                             Asignar(aux2^.info,pila^.info);
  95.                             aux2 := NIL;
  96.                             aux^.sig := aux2;
  97.  
  98.                         END;
  99.  
  100.                     pila := pila^.sig;
  101.                 END;
  102.  
  103.         END;
  104.  
  105.  
  106.  
  107.  
  108. END.