Advertisement
diegoguerrero

ED - TAD Pila - Pila dinámica v. 1

Mar 21st, 2019
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.02 KB | None | 0 0
  1. UNIT uPilaDinamica;
  2. INTERFACE
  3.     USES uElementoInteger;
  4.         {PARAMETROS GENERICOS: Funciones Asignar(), SonIguales(), Imprimir() propias de cada tipo de elemento}
  5.     TYPE
  6.         TPila = ^TNodo;
  7.         TNodo = RECORD
  8.             info : TElemento;
  9.             ant : TPila;
  10.         END;
  11.  
  12.     {Constructoras generadoras}
  13.         PROCEDURE CrearPilaVacia(VAR p : TPila);
  14.         PROCEDURE Apilar(VAR p : TPila; e : TElemento);
  15.     {Constructoras no generadoras}
  16.         PROCEDURE Desapilar(VAR p : TPila);
  17.         PROCEDURE Copiar(VAR p : TPila; q : TPila);
  18.         PROCEDURE DestruirPila(VAR p : TPila);
  19.     {Observadoras selectoras}
  20.         PROCEDURE Cima(VAR p : TPila; VAR e : TElemento);
  21.     {Observadoras no selectoras}
  22.         FUNCTION EsPilaVacia(p : TPila):boolean;
  23.  
  24. IMPLEMENTATION
  25. {Constructoras generadoras}
  26.     PROCEDURE CrearPilaVacia(VAR p : TPila);
  27.         BEGIN
  28.             p := NIL;
  29.         END;
  30.     PROCEDURE Apilar(VAR p : TPila; e : TElemento);
  31.         VAR
  32.             aux : TPila;
  33.         BEGIN
  34.             new(aux);
  35.             Asignar(aux^.info, e);
  36.             aux^.ant := p;
  37.             p := aux;
  38.         END;
  39.  
  40. {Constructoras no generadoras}
  41.     PROCEDURE Desapilar(VAR p : TPila);
  42.         VAR
  43.             aux : TPila;
  44.         BEGIN
  45.             IF (NOT EsPilaVacia(p)) THEN BEGIN
  46.                 aux := p;
  47.                 p := p^.ant;
  48.                 dispose(aux);
  49.             END;
  50.         END;
  51.     PROCEDURE Copiar(VAR p : TPila; q : TPila);
  52.         VAR
  53.             aux : TPila;
  54.             e : TElemento;
  55.         BEGIN
  56.             CrearPilaVacia(aux);
  57.             {Se copia todo el contenido de p en q, manteniendo el orden}
  58.             WHILE (NOT EsPilaVacia(q)) DO BEGIN
  59.                 Cima(p, e);
  60.                 Apilar(aux, e);
  61.                 Desapilar(q);
  62.             END;
  63.             WHILE (NOT EsPilaVacia(aux)) DO BEGIN
  64.                 Cima(aux, e);
  65.                 Apilar(p, e);
  66.                 Desapilar(aux);
  67.             END;
  68.         END;
  69.     PROCEDURE DestruirPila(VAR p : TPila);
  70.         BEGIN
  71.             WHILE (NOT EsPilaVacia(p)) DO BEGIN
  72.                 Desapilar(p);
  73.             END;
  74.         END;
  75.  
  76. {Observadoras selectoras}
  77.     PROCEDURE Cima(VAR p : TPila; VAR e : TElemento);
  78.         BEGIN
  79.             IF (NOT EsPilaVacia(p)) THEN
  80.                 Asignar(e, p^.info);
  81.         END;
  82.  
  83. {Observadoras no selectoras}
  84.     FUNCTION EsPilaVacia(p : TPila):boolean;
  85.         BEGIN
  86.             IF (p = NIL) THEN
  87.                 EsPilaVacia := TRUE
  88.             ELSE
  89.                 EsPilaVacia := FALSE;
  90.         END;
  91. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement