Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UNIT uListaEnlazadaSimple;
- INTERFACE
- USES uElementoInteger;
- {PARAMETROS GENERICOS: Funciones Asignar(), SonIguales(), Imprimir() propias de cada tipo de elemento}
- TYPE
- TLista = ^TNodo;
- TNodo = RECORD
- info : TElemento;
- sig : TLista;
- END;
- {Constructoras generadoras}
- PROCEDURE CrearVacia(VAR l : TLista);
- PROCEDURE Construir(VAR l : TLista; e : TElemento);
- {Constructoras no generadoras}
- PROCEDURE Concatenar(VAR l : TLista; r : TLista);
- PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
- PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
- {Observadoras selectoras}
- PROCEDURE Primero(l : TLista; VAR e : TElemento);
- PROCEDURE Resto(l : TLista; VAR r : TLista);
- {Observadoras no selectoras}
- FUNCTION EsVacia(l : TLista):boolean;
- FUNCTION Longitud(l : TLista):integer;
- PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
- FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
- {Interacción con el usuario}
- PROCEDURE ImprimirListaCompleta(l : TLista);
- IMPLEMENTATION
- {Constructoras generadoras}
- PROCEDURE CrearVacia(VAR l : TLista);
- BEGIN
- l := NIL;
- END;
- PROCEDURE Construir(VAR l : TLista; e : TElemento);
- VAR
- aux : TLista;
- BEGIN
- new(aux);
- Asignar(aux^.info, e);
- aux^.sig := l;
- l := aux;
- END;
- {Constructoras no generadoras}
- PROCEDURE Concatenar(VAR l : TLista; r : TLista);
- VAR
- aux : TLista;
- BEGIN
- IF(NOT EsVacia(r)) THEN BEGIN
- IF (EsVacia(l)) THEN
- l := r
- ELSE BEGIN
- aux := l;
- WHILE (aux^.sig <> NIL) DO
- aux := aux^.sig;
- aux^.sig := r;
- END;
- END;
- END;
- PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
- VAR
- aux, aux2 : TLista;
- encontrado : boolean;
- BEGIN
- IF NOT EsVacia(l) THEN BEGIN
- IF(SonIguales(l^.info,e)) THEN BEGIN
- aux := l^.sig;
- dispose(l);
- l := aux;
- END ELSE BEGIN
- aux := l;
- WHILE (aux^.sig <> NIL) DO BEGIN
- IF(SonIguales(aux^.sig^.info, e)) THEN BEGIN
- aux2 := aux^.sig;
- aux^.sig := aux2^.sig;
- dispose(aux2);
- END ELSE
- aux := aux^.sig;
- END;
- END;
- END;
- END;
- PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
- VAR
- aux, aux2 : TLista;
- BEGIN
- aux2 := l;
- IF (NOT EsVacia(l)) THEN BEGIN
- WHILE (aux2^.sig <> NIL) DO BEGIN
- aux2 := aux2^.sig;
- END;
- new(aux);
- Asignar(aux^.info, e);
- aux^.sig := NIL;
- aux2^.sig := aux;
- END ELSE
- Construir(l, e);
- END;
- {Observadoras selectoras}
- PROCEDURE Primero(l : TLista; VAR e : TElemento);
- BEGIN
- IF (NOT EsVacia(l)) THEN
- Asignar(e, l^.info);
- END;
- PROCEDURE Resto(l : TLista; VAR r : TLista);
- BEGIN
- IF (NOT EsVacia(l)) THEN
- r := l^.sig;
- END;
- {Observadoras no selectoras}
- FUNCTION EsVacia(l : TLista):boolean;
- BEGIN
- EsVacia := (l = NIL);
- END;
- FUNCTION Longitud(l : TLista):integer;
- VAR
- n : integer;
- BEGIN
- n := 0;
- WHILE (l <> NIL) DO BEGIN
- n := n + 1;
- l := l^.sig;
- END;
- Longitud := n;
- END;
- PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
- BEGIN
- IF (NOT EsVacia(l)) THEN BEGIN
- WHILE (l^.sig <> NIL) DO BEGIN
- l := l^.sig;
- END;
- Asignar(e, l^.info);
- END;
- END;
- FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
- VAR
- encontrado : boolean;
- BEGIN
- encontrado := FALSE;
- WHILE ((l <> NIL) AND (NOT encontrado)) DO BEGIN
- IF (SonIguales(l^.info, e)) THEN
- encontrado := TRUE
- ELSE
- l := l^.sig;
- END;
- Pertenece := encontrado;
- END;
- {Interacción con el usuario}
- PROCEDURE ImprimirListaCompleta(l : TLista);
- BEGIN
- write('[');
- WHILE (l <> NIL) DO BEGIN
- Imprimir(l^.info);
- write(', ');
- l := l^.sig;
- END;
- writeln(']');
- END;
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement