Está en la página 1de 16

EJEMPLO 8.

1
package ListaPuntos;
public class Punto
{
double x, y;
public Punto(double x, double y)
{
this.x = x;
this.y = y;
}
public Punto() // constructor por deecto
{
x = y = !.!;
}
}
package ListaPuntos;
public class "odo
{
Punto dato;
"odo enlace;
public "odo(Punto p)
{
dato = p;
enlace = null;
}
public "odo(Punto p, "odo n)
{
dato = p;
enlace = n;
}
}
EJEMPLO 8.2
i#port $a%a.io.&;
class "odo
{
int dato;
"odo enlace;
public "odo(int x)
{
dato = x;
enlace = null;
}
public "odo(int x, "odo n)
{
dato = x;
enlace = n;
}
public int get'ato()
{
return dato;
}
public "odo get(nlace()
{
return enlace;
}
public %oid set(nlace("odo enlace)
{
this.enlace = enlace;
}
}
public class Lista
{
pri%ate "odo pri#ero;

public Lista()
{
pri#ero = null;
}
pri%ate int leer(ntero()
{
)uered*eader en = ne+ )uered*eader( ne+
,nput-trea#*eader (-yste#.in));
int d = ./;

try {
-yste#.out.print(0 (ntero1 0);
d = ,nteger.parse,nt(en.readLine());
}
catch((xception o)
{
-yste#.out.print(0 (rror entrada1 0 2 o);
}
return d;
}
public Lista crearLista()
{
int x;
pri#ero = null;
do {
x = leer(ntero();
i (x 3= ./)
{
pri#ero = ne+ "odo(x,pri#ero);
}
}+hile (x 3= ./);
return this;
}
}
EJERCICIO 8.1
package Lista(nteros;
// clase "odo con las dos partes de un nodo y su constructor
public class "odo
{
int dato;
"odo enlace;
public "odo(int x)
{
dato = x;
enlace = null;
}
}

/& clase Lista con las operaciones1 insertar por la cabe4a y
%isuali4ar (recorre los nodos) para #ostrar los datos. 5de#6s,
el atributo pri#ero, 7ue apunta al pri#er nodo.
&/
package Lista(nteros;
public class Lista
{
pri%ate "odo pri#ero;

public Lista()
{
pri#ero = null;
}
public Lista insertar8abe4aLista(int entrada)
{
"odo nue%o ;
nue%o = ne+ "odo(entrada);
nue%o.enlace = pri#ero;
pri#ero= nue%o;
return this;
}
public %oid %isuali4ar()
{
"odo n;
int k = !;
n = pri#ero;
+hile (n 3= null)
{
-yste#.out.print(n.dato 2 0 0);
n = n.enlace;
k22;
-yste#.out.print( (k9/: 3= ! ; 0 0 1 0<n0));
}
}
}
// clase con mtodo main
i#port $a%a.util.&;
i#port Lista(nteros.&;
public class Lista5leatoria
{
public static %oid #ain(-tring => a)
{
*ando# r;
int d;
Lista lista;
int k;
r = ne+ *ando#();
lista = ne+ Lista(); // crea lista %ac?a
k = @ath.abs(r.next,nt() 9 ::); // nA#ero de nodos
// -on insertados ele#entos en la lista
or (; k B !; k.. )
{
d = r.next,nt() 9 CC ;
lista.insertar8abe4aLista(d);
}
// recorre la lista para escribir sus ele#entos
-yste#.out.println(0(le#entos de la lista generados al a4ar0);
lista.%isuali4ar();
}
}
EJERCICIO 8.2
i#port $a%a.util.&;
i#port Lista(nteros.ListaDrdenada;
public class Lista(nDrden
{
public static %oid #ain(-tring => a)
{
*ando# r;
int d;
ListaDrdenada lista;
int k;
r = ne+ *ando#(); // generador de nA#eros aleatorios
lista = ne+ ListaDrdenada(); // crea lista %ac?a
k = r.next,nt(CC)2/; // nA#ero de ele#entos
// inserta ele#entos en la lista
or (; k B= !; k.. )
{
d = r.next,nt();
lista.insertaDrden(d);
}
// escribe los ele#entos de la lista
-yste#.out.println(0(le#entos de la lista ordenada <n0);
lista.%isuali4ar();
}
}
EJEMPLO 8.4
public "odo buscarPosicion(int posicion)
{
"odo indice;
int i;
i (! E posicion) // posiciFn ha de ser #ayor 7ue !
return null;
indice = pri#ero;
or (i = / ;(i E posicion) GG (indice 3= null); i22)
indice = indice.enlace;
return indice;
}
EJERCICIO 8.3
i#port $a%a.util.*ando#;
i#port $a%a.io.&;
i#port lista'oble(nlace.&;
class Lista(n*ango
{
public static %oid #ain(-tring => ar) thro+s ,D(xception
{
*ando# r;
int d, x/,xH;
inal int @ = HC; // nA#ero de ele#entos de la lista
inal int @I = CCC;
)uered*eader entrada = ne+ )uered*eader(
ne+ ,nput-trea#*eader(-yste#.in));
Lista'oble lista'b;
r = ne+ *ando#();
lista'b = ne+ Lista'oble();
or (int $ = /; $ E= @ ; $22)
{
d = r.next,nt(@I) 2 /;
lista'b.insertar8abe4aLista(d);
}

-yste#.out.println(0(le#entos de la lista original0);
lista'b.%isuali4ar();
// rango de %alores
-yste#.out.println(0<n*ango 7ue %a a contener la lista0);
x/ = ,nteger.parse,nt(entrada.readLine());
xH = ,nteger.parse,nt(entrada.readLine());
//
,teradorLista iterador = ne+ ,teradorLista(lista'b);
"odo a;
a = iterador.siguiente();
+hile (a 3= null)
{
int +;
+ = a.get'ato();
i (3(+ B= x/ GG + E= xH)) // uera de rango
lista'b.eli#inar(+);
a = iterador.siguiente();
}
-yste#.out.println(0(le#entos actuales de la lista0);
lista'b.%isuali4ar();
}
}
EJERCICIO 8.4
package lista8ircularPalabra;
class "odo
{
-tring dato;
"odo enlace;
public "odo (-tring entrada) {;}
}
public class Lista8ircular
{
pri%ate "odo lc;
public Lista8ircular(){;}
public Lista8ircular insertar(-tring entrada){;}
public %oid eli#inar(-tring entrada)
{
"odo actual;
actual = lc;
+hile ((actual.enlace 3= lc) GG
3(actual.enlace.dato.e7uals(entrada)))
{
i (3actual.enlace.dato.e7uals(entrada))
actual = actual.enlace;
}
// (nlace de nodo anterior con el siguiente
// si se ha encontrado el nodo.
i (actual.enlace.dato.e7uals(entrada))
{
"odo p;
p = actual.enlace; // "odo a eli#inar
i (lc == lc.enlace) // Lista con un solo nodo
lc = null;
else
{
i (p == lc)
{
lc = actual; // -e borra el ele#ento reerenciado por lc,
// el nue%o acceso a la lista es el anterior
}
actual.enlace = p.enlace;
}
p = null;
}
}
public %oid borrarLista()
{
"odo p;
i (lc 3= null)
{
p = lc;
do {
"odo t;
t = p;
p = p.enlace;
t = null; // no es estricta#ente necesario
}+hile(p 3= lc);
}
else
-yste#.out.println(0<n<t Lista %ac?a.0);
lc = null;
}
public %oid recorrer(){;}
}
/& clase con el #Jtodo #ain(). -e escribe un sencillo #enu para
elegir operaciones con la lista circular.
&/
i#port $a%a.io.&;
i#port lista8ircularPalabra.&;
class ListaPalabras
{
public static %oid #ain(-tring => a) thro+s ,D(xception
{
-tring palabra;
Lista8ircular lista8p;
int opc;
)uered*eader entrada = ne+ )uered*eader(
ne+ ,nput-trea#*eader(-yste#.in));
lista8p = ne+ Lista8ircular();
-yste#.out.println(0<n (ntrada de "o#bres. Ker#ina con LM.<n0);
+hile ((palabra = entrada.readLine())3= null)
{
-tring nue%a;
nue%a = ne+ -tring(palabra);
lista8p.insertar(nue%a);
}
-yste#.out.println(0<t<tLista circular de palabras0);
lista8p.recorrer();
-yste#.out.println(0<n<t Dpciones para #ane$ar la lista0);
do {
-yste#.out.println(0/. (li#inar una palabra.<n0);
-yste#.out.println(0H. @ostrar la lista co#pleta.<n0);
-yste#.out.println(0N. -alir y eli#inar la lista.<n0);
do {
opc = ,nteger.parse,nt(entrada.readLine());
}+hile (opcE/ OO opcBN);
s+itch (opc) {
case /1 -yste#.out.print(0Palabra a eli#inar1 0);
palabra = entrada.readLine();
lista8p.eli#inar(palabra);
break;
case H1 -yste#.out.println(0Palabras en la Lista1<n0);
lista8p.recorrer();
break;
case N1 -yste#.out.print(0(li#inaciFn de la lista.0);
lista8p.borrarLista();
}
}+hile (opc 3= N);
}
}
LISTA ORDENADA
package Lista(nteros;
public class ListaDrdenada extends Lista
{
public ListaDrdenada()
{
super();
}
public ListaDrdenada insertaDrden(int entrada)
{
"odo nue%o ;
nue%o = ne+ "odo(entrada);
i (pri#ero == null) // lista %ac?a
pri#ero = nue%o;
else i (entrada E pri#ero.get'ato())
{
nue%o. set(nlace(pri#ero);
pri#ero = nue%o;
}
else /& bAs7ueda del nodo anterior a partir del 7ue
se debe insertar &/
{
"odo anterior, p;
anterior = p = pri#ero;
+hile ((p.get(nlace() 3= null) GG (entrada B p.get'ato()))
{
anterior = p;
p = p.get(nlace();
}
i (entrada B p.get'ato()) //inserta despuJs del Alti#o nodo
anterior = p;
// -e procede al enlace del nue%o nodo
nue%o.set(nlace(anterior.get(nlace());
anterior.set(nlace(nue%o);
}
return this;
}
// #Jtodos a codiicar1
public %oid eli#inar (int entrada){ ; }
public "odo buscarLista(int destino){ ; }
}
LISTA DOBLEMENTE ENLAZADA
package lista'oble(nlace;
public class "odo
{
int dato;
"odo adelante;
"odo atras;
public "odo(int entrada)
{
dato = entrada;
adelante = atras = null;
}
public int get'ato()
{
return dato;
}
public "odo get(nlace()
{
return adelante;
}
public %oid set(nlace("odo adelante)
{
this.adelante = adelante;
}
}
package lista'oble(nlace;
public class Lista'oble
{
"odo cabe4a;
public Lista'oble()
{
cabe4a = null;
}
public Lista'oble insertar8abe4aLista(int entrada)
{


"odo nue%o;

nue%o = ne+ "odo(entrada);
nue%o.adelante = cabe4a;
i (cabe4a 3= null )
cabe4a.atras = nue%o;
cabe4a = nue%o;
return this;
}

public Lista'oble inserta'espues("odo anterior, int entrada)
{
"odo nue%o;
nue%o = ne+ "odo(entrada);
nue%o.adelante = anterior.adelante;
i (anterior.adelante 3=null)
anterior.adelante.atras = nue%o;
anterior.adelante = nue%o;
nue%o.atras = anterior;
return this;
}

public %oid eli#inar (int entrada)
{
"odo actual;
boolean encontrado = alse;

actual = cabe4a;
// )ucle de bAs7ueda
+hile ((actual 3= null) GG (3encontrado))
{
/& la co#paraciFn se reali4a con el #Jtodo e7uals()...,
depende del tipo (le#ento &/
encontrado = (actual.dato == entrada);
i (3encontrado)
actual = actual.adelante;
}
// (nlace de nodo anterior con el siguiente
i (actual 3= null)
{
//distingue entre nodo cabecera o resto de la lista
i (actual == cabe4a)
{
cabe4a = actual.adelante;
i (actual.adelante 3= null)
actual.adelante.atras = null;
}
else i (actual.adelante 3= null) // "o es el Alti#o nodo
{
actual.atras.adelante = actual.adelante;
actual.adelante.atras = actual.atras;
}
else // Alti#o nodo
actual.atras.adelante = null;

actual = null;
}
}

public %oid %isuali4ar()
{
"odo n;
int k = !;

n = cabe4a;
+hile (n 3= null)
{
-yste#.out.print(n.dato 2 0 0);
n = n.adelante;
k22;
-yste#.out.print( (((k9/! 3= !)GG (n3= null)) ; 0 0 1 0<n0));
}
}
}
ITERADOR DE LISTA DOBLE
package lista'oble(nlace;
public class ,teradorLista
{
"odo actual;
public ,teradorLista(Lista'oble ld)
{
actual = ld.cabe4a;
}
public "odo siguiente()
{
"odo a;
a = actual;
i (actual 3= null)
{
actual = actual.adelante;
}
return a;
}
}
LISTA GENRICA
// 'eclaraciFn de la clase nodo
package listaPenerica;
public class "odo
{
Db$ect dato;
"odo enlace;
public "odo(Db$ect x)
{
dato = x;
enlace = null;
}
public "odo(Db$ect x, "odo n)
{
dato = x;
enlace = n;
}
public Db$ect leer'ato()
{
return dato;
}
public "odo siguiente()
{
return enlace;
}
}
// 'eclaraciFn de la clase Lista.
package listaPenerica;
public class Lista
{
pri%ate "odo pri#ero;
public Lista()
{
pri#ero = null;
}
public "odo leerPri#ero()
{
return pri#ero;
}
public Lista insertar8abe4aLista(Db$ect entrada)
{
"odo nue%o ;
nue%o = ne+ "odo(entrada)
nue%o.enlace = pri#ero;
pri#ero= nue%o;
return this;
}
public "odo leerPri#ero()
{
return pri#ero;
}
public Lista insertarLista("odo anterior, Db$ect entrada)
{
"odo nue%o;
nue%o = ne+ "odo(entrada);
nue%o.enlace = anterior.enlace
anterior.enlace = nue%o;
return this;
}
public %oid eli#inar (Db$ect entrada)
{
"odo actual, anterior;
boolean encontrado;
actual = pri#ero;
anterior = null;
encontrado = alse;
// )ucle de bAs7ueda
+hile ((actual3= null) GG 3actual.dato.e7uals(entrada))
{
i (3actual.dato.e7uals(entrada))
{
anterior = actual;
actual = actual.enlace;
}
}

i (actual 3= null)
{
// -e distingue entre 7ue el nodo sea el cabecera
// o del resto de la lista
i (acual == pri#ero)
{
pri#ero = actual.enlace;
}
else
{
anterior.enlace = actual.enlace
}
actual = null;
}
}
public "odo buscarLista(Db$ect destino)
// destino1 dato 7ue se busca en la lista.
{
"odo indice;
or (indice = pri#ero; indice 3= null; indice = indice.enlace)
i (indice.dato.e7uals(destino))
return indice;
return null;
}
public %oid %isuali4ar()
{
"odo n;
n = pri#ero;
+hile (n 3= null)
{
-iste#.out.print(n.dato 2 0 0);
n = n.enlace;
}
}
}
ITERADOR LISTA GENRICA
package listaPenerica;
public class Lista,terador
{
pri%ate "odo pr#, actual;

public Lista,terador(Lista list)
{
pr# = actual = list.leerPri#ero();
}

public Db$ect siguiente()
{
Db$ect ele#ento = null;
i (actual 3= null)
{
ele#ento = actual.leer'ato();
actual = actual.siguiente();
}
return ele#ento;
}
public %oid inic,ter()
{
actual = pr#;
}
}

También podría gustarte