UNIT uListaCirc;
INTERFACE
USES uElem;
TYPE
TNodo = ^TEnganche;
TEnganche = RECORD
info:TElem;
sig:TNodo;
END;
TLista = TNodo;
PROCEDURE CrearListaVacia (VAR lista:TLista);
PROCEDURE Insertar (VAR lista:TLista; elem:TElem);
PROCEDURE InsertarFinal (VAR lista:TLista; elem:TElem);
FUNCTION EsListaVacia (lista:TLista):boolean;
PROCEDURE MostrarLista (lista:TLista);
PROCEDURE Resto (VAR lista:TLista);
PROCEDURE BorrarLista (VAR lista:TLista);
{Eliminar Elemento}
IMPLEMENTATION
PROCEDURE CrearListaVacia (VAR lista:TLista);
BEGIN
lista := NIL;
END;
PROCEDURE Insertar (VAR lista:TLista; elem:TElem);
VAR
aux:TNodo;
BEGIN
new(aux);
Asignar(aux^.info,elem);
IF EsListaVacia(lista) THEN
BEGIN
aux^.sig := aux;
lista := aux;
END
ELSE
BEGIN
aux^.sig := lista^.sig;
lista^.sig := aux;
END;
END;
PROCEDURE InsertarFinal (VAR lista:TLista; elem:TElem);
VAR
aux:TNodo;
BEGIN
IF EsListaVacia(lista) THEN
Insertar(lista,elem)
ELSE
BEGIN
new(aux);
Asignar(aux^.info,elem);
aux^.sig := lista^.sig;
lista^.sig := aux;
lista := aux;
END;
END;
FUNCTION EsListaVacia (lista:TLista):boolean;
BEGIN
EsListaVacia := (lista = NIL);
END;
PROCEDURE MostrarLista (lista:TLista);
VAR
aux : TLista;
BEGIN
IF lista<>NIL THEN
BEGIN
aux := lista^.sig;
Mostrar(lista^.sig^.info);
lista:=lista^.sig^.sig;
WHILE lista<>aux DO
BEGIN
Mostrar(lista^.info);
lista := lista^.sig;
END;
END;
END;
PROCEDURE Resto (VAR lista:TLista);
VAR
aux : TNodo;
BEGIN
IF NOT(EsListaVacia(lista)) THEN
IF (lista = lista^.sig) THEN
dispose(lista)
ELSE
BEGIN
aux := lista^.sig;
lista^.sig := lista^.sig^.sig;
dispose(aux);
END;
END;
PROCEDURE BorrarLista (VAR lista:TLista);
BEGIN
IF NOT(EsListaVacia(lista)) THEN
WHILE lista<>NIL DO
Resto(lista);
END;
END.