UNIT uPila;
INTERFACE
USES uElem;
TYPE
TPila = ^TNodo;
TNodo = RECORD
info:TElem;
sig:TPila;
END;
PROCEDURE CrearPilaVacia (VAR pila:TPila);
PROCEDURE Apilar (VAR pila:TPila; elem:TElem);
PROCEDURE Desapilar (VAR pila:TPila);
PROCEDURE BorrarPila (VAR pila:TPila);
PROCEDURE Cima (pila:TPila; VAR primer:TElem);
FUNCTION EsPilaVacia (pila:TPila):boolean;
PROCEDURE CopiarPila (pila:TPila ;VAR pilaOut:TPila);
IMPLEMENTATION
PROCEDURE CrearPilaVacia (VAR pila:TPila);
BEGIN
pila := NIL;
END;
PROCEDURE Apilar (VAR pila:TPila; elem:TElem);
VAR
aux:TPila;
BEGIN
new(aux);
Asignar(aux^.info,elem);
aux^.sig := pila;
pila := aux;
END;
PROCEDURE Desapilar (VAR pila:TPila);
VAR
aux:TPila;
BEGIN
IF NOT(EsPilaVacia(pila)) THEN
BEGIN
aux := pila;
pila := pila^.sig;
dispose(aux);
END;
END;
PROCEDURE BorrarPila (VAR pila:TPila);
BEGIN
IF NOT(EsPilaVacia(pila)) THEN
WHILE pila<>NIL DO
Desapilar(pila);
END;
PROCEDURE Cima (pila:TPila; VAR primer:TElem);
BEGIN
IF NOT(EsPilaVacia(pila)) THEN
primer := pila^.info;
END;
FUNCTION EsPilaVacia (pila:TPila):boolean;
BEGIN
EsPilaVacia := (pila = NIL);
END;
PROCEDURE CopiarPila (pila:TPila ;VAR pilaOut:TPila);
VAR
aux,aux2:TPila;
BEGIN
WHILE pila<>NIL DO
BEGIN
aux := pilaOut;
IF aux=NIL THEN
Apilar(pilaOut,pila^.info)
ELSE
BEGIN
WHILE aux^.sig<>NIL DO
aux := aux^.sig;
new(aux2);
Asignar(aux2^.info,pila^.info);
aux2 := NIL;
aux^.sig := aux2;
END;
pila := pila^.sig;
END;
END;
END.