UNIT uCola;
INTERFACE
USES uElem;
TYPE
TAlmacen = ^TNodo;
TNodo = RECORD
info:TElem;
sig:TAlmacen;
END;
TCola = RECORD
cab,fin:TAlmacen;
END;
PROCEDURE CrearColaVacia (VAR cola:TCola);
PROCEDURE InsertarCola (VAR cola:TCola; elem:TElem);
PROCEDURE Eliminar (VAR cola:TCola);
PROCEDURE Cabecera (cola:TCola; VAR elem:TElem);
PROCEDURE Ultimo (cola:TCola; VAR elem:TElem);
FUNCTION Pertenece (cola:TCola; elem:TElem):boolean;
FUNCTION EsColaVacia (cola:TCola):boolean;
PROCEDURE CopiarCola (cola:TCola ; VAR colaCopia:TCola);
IMPLEMENTATION
PROCEDURE CrearColaVacia (VAR cola:TCola);
BEGIN
cola.cab := NIL;
cola.fin := NIL;
END;{CrearColaVacia}
PROCEDURE InsertarCola (VAR cola:TCola; elem:TElem);
VAR
aux:TAlmacen;
BEGIN
new(aux);
Asignar(aux^.info,elem);
aux^.sig := NIL;
IF EsColaVacia(cola) THEN
BEGIN
cola.cab := aux;
cola.fin := aux;
END {IF}
ELSE
BEGIN
cola.fin^.sig := aux;
cola.fin := aux;
END;{ELSE}
END;{CrearColaVacia}
PROCEDURE Eliminar (VAR cola:TCola);
VAR
aux:TAlmacen;
BEGIN
IF NOT(EsColaVacia(cola)) THEN
BEGIN
aux := cola.cab;
cola.cab := cola.cab^.sig;
dispose(aux);
END;{IF}
END;{CrearColaVacia}
PROCEDURE Cabecera (cola:TCola; VAR elem:TElem);
BEGIN
IF NOT(EsColaVacia(cola)) THEN
Asignar(elem , cola.cab^.info);
END;{CrearColaVacia}
PROCEDURE Ultimo (cola:TCola; VAR elem:TElem);
BEGIN
IF NOT(EsColaVacia(cola)) THEN
Asignar(elem , cola.fin^.info);
END;{CrearColaVacia}
FUNCTION Pertenece (cola:TCola; elem:TElem):boolean;
VAR
check:boolean;
BEGIN
check := FALSE;
WHILE (check=FALSE) AND NOT(EsColaVacia(cola)) DO
BEGIN
check := Iguales(cola.cab^.info , elem);
cola.cab := cola.cab^.sig;
END;{WHILE}
Pertenece := check;
END;{CrearColaVacia}
FUNCTION EsColaVacia (cola:TCola):boolean;
BEGIN
EsColaVacia := (cola.cab = NIL);
END;{CrearColaVacia}
PROCEDURE CopiarCola (cola:TCola ; VAR colaCopia:TCola);
VAR
aux:TAlmacen;
elem:TElem;
BEGIN
WHILE NOT(EsColaVacia(cola)) DO
BEGIN
Cabecera(cola,elem);
IF EsColaVacia(colaCopia) THEN
BEGIN
new(aux);
Asignar(aux^.info,elem);
aux^.sig := NIL;
colaCopia.cab := aux;
colaCopia.fin := aux;
END{IF}
ELSE
BEGIN
new(aux);
Asignar(aux^.info,elem);
aux^.sig := NIL;
colaCopia.fin^.sig := aux;
colaCopia.fin := aux;
END;{ELSE}
cola.cab := cola.cab^.sig;
END;{WHILE}
END;{CrearColaVacia}
END.