Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- UNIT uListaSimulacionEnlazadaSimple;
- INTERFACE
- USES uElementoInteger;
- {PARÁMETROS GENÉRICOS: Funciones Asignar(), SonIguales(), Imprimir() propias de cada tipo de elemento}
- CONST
- MAX = 100;
- TYPE
- TNodo = RECORD
- info : TElemento;
- sig : integer;
- END;
- TALista = ARRAY[1..MAX] OF TNodo;
- TLista = RECORD
- datos : TALista;
- o, l : integer;
- 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);
- {Observadoras no selectoras}
- FUNCTION EsVacia(l : TLista):boolean;
- FUNCTION EsLlena(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);
- VAR
- i : integer;
- BEGIN
- l.o := -1;
- l.l := 1;
- FOR i := 1 TO (MAX - 1) DO BEGIN
- l.datos[i].sig := i + 1;
- END;
- l.datos[MAX].sig := -1;
- END;
- PROCEDURE Construir(VAR l : TLista; e : TElemento);
- VAR
- aux : integer;
- BEGIN
- IF (NOT EsLlena(l)) THEN BEGIN
- Asignar(l.datos[l.l].info, e);
- aux := l.l;
- l.l := l.datos[l.l].sig;
- l.datos[aux].sig := l.o;
- l.o := aux;
- END;
- END;
- {Constructoras no generadoras}
- PROCEDURE Concatenar(VAR l : TLista; r : TLista);
- BEGIN
- IF (NOT EsVacia(r) AND ((Longitud(l) + Longitud(r)) <= MAX)) THEN BEGIN
- WHILE (r.o <> -1) DO BEGIN
- InsertarFinal(l, r.datos[r.o].info);
- r.o := r.datos[r.o].sig;
- END;
- END;
- END;
- PROCEDURE BorrarElemento(VAR l : TLista; e : TElemento);
- VAR
- aux, aux2 : integer;
- borrado : boolean;
- BEGIN
- IF (NOT EsVacia(l)) THEN BEGIN
- IF (SonIguales(l.datos[l.o].info, e)) THEN BEGIN
- aux := l.o;
- l.o := l.datos[l.o].sig;
- l.datos[aux].sig := l.l;
- l.l := aux;
- END ELSE BEGIN
- borrado := FALSE;
- aux := l.datos[l.o].sig;
- aux2 := l.o;
- WHILE ((aux2 <> -1) AND (NOT borrado)) DO BEGIN
- IF (SonIguales(l.datos[aux].info, e)) THEN BEGIN
- IF (l.datos[aux].sig <> -1) THEN
- l.datos[aux].sig := l.datos[aux2].sig;
- l.datos[aux2].sig := -1;
- l.datos[aux].sig := l.l;
- l.l := aux;
- borrado := TRUE;
- END ELSE BEGIN
- aux2 := aux;
- aux := l.datos[aux].sig;
- END;
- END;
- END;
- END;
- END;
- PROCEDURE InsertarFinal(VAR l : TLista; e : TElemento);
- VAR
- aux, aux2 : integer;
- BEGIN
- IF (NOT EsLlena(l)) THEN
- IF (NOT EsVacia(l)) THEN BEGIN
- Asignar(l.datos[l.l].info, e);
- aux := l.datos[l.l].sig;
- aux2 := l.l;
- l.datos[l.l].sig := -1;
- l.l := aux;
- {Cambio el uso de aux}
- aux := l.o;
- WHILE (l.datos[aux].sig <> -1) DO
- aux := l.datos[aux].sig;
- l.datos[aux].sig := aux2;
- END ELSE
- Construir(l, e);
- END;
- {Observadoras selectoras}
- PROCEDURE Primero(l : TLista; VAR e : TElemento);
- BEGIN
- Asignar(e, l.datos[l.o].info);
- END;
- {Observadoras no selectoras}
- FUNCTION EsVacia(l : TLista):boolean;
- BEGIN
- EsVacia := (l.o = -1);
- END;
- FUNCTION EsLlena(l : TLista):boolean;
- BEGIN
- EsLlena := (l.l = -1);
- END;
- FUNCTION Longitud(l : TLista):integer;
- VAR
- n : integer;
- BEGIN
- n := 0;
- WHILE (l.o <> -1) DO BEGIN
- n := n + 1;
- l.o := l.datos[l.o].sig;
- END;
- Longitud := n;
- END;
- PROCEDURE Ultimo(l : TLista; VAR e : TElemento);
- BEGIN
- WHILE (l.datos[l.o].sig <> -1) DO
- l.o := l.datos[l.o].sig;
- Asignar(e, l.datos[l.o].info);
- END;
- FUNCTION Pertenece(l : TLista; e : TElemento):boolean;
- VAR
- encontrado : boolean;
- BEGIN
- encontrado := FALSE;
- WHILE ((l.datos[l.o].sig <> -1) AND (NOT encontrado)) DO BEGIN
- IF (SonIguales(l.datos[l.o].info, e)) THEN
- encontrado := TRUE;
- l.o := l.datos[l.o].sig;
- END;
- Pertenece := encontrado;
- END;
- {Interacción con el usuario}
- PROCEDURE ImprimirListaCompleta(l : TLista);
- BEGIN
- write('[');
- WHILE (l.o <> -1) DO BEGIN
- write(l.datos[l.o].info,', ');
- l.o := l.datos[l.o].sig;
- END;
- writeln(']');
- END;
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement