Java-listas

  • Uploaded by: Laoska B.
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Java-listas as PDF for free.

More details

  • Words: 1,837
  • Pages: 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 defecto { x = y = 0.0; } } package ListaPuntos; public class Nodo { Punto dato; Nodo enlace; public Nodo(Punto p) { dato = p; enlace = null; } public Nodo(Punto p, Nodo n) { dato = p; enlace = n; } }

EJEMPLO 8.2 import java.io.*; class Nodo { int dato; Nodo enlace; public Nodo(int x) { dato = x; enlace = null; } public Nodo(int x, Nodo n) { dato = x; enlace = n; } public int getDato() { return dato; } public Nodo getEnlace() { return enlace; } public void setEnlace(Nodo enlace) { this.enlace = enlace; } } public class Lista { private Nodo primero; public Lista() { primero = null; } private int leerEntero() { BufferedReader en = new BufferedReader( new InputStreamReader (System.in)); int d = -1;

}

try { System.out.print(" Entero: "); d = Integer.parseInt(en.readLine()); } catch(Exception o) { System.out.print(" Error entrada: " + o); } return d;

public Lista crearLista() { int x;

primero = null; do { x = leerEntero(); if (x != -1) { primero = new Nodo(x,primero); } }while (x != -1); return this; }

}

EJERCICIO 8.1 package ListaEnteros; // clase Nodo con las dos partes de un nodo y su constructor public class Nodo { int dato; Nodo enlace; public Nodo(int x) { dato = x; enlace = null; } } /* clase Lista con las operaciones: insertar por la cabeza y visualizar (recorre los nodos) para mostrar los datos. Además, el atributo primero, que apunta al primer nodo. */ package ListaEnteros; public class Lista { private Nodo primero; public Lista() { primero = null; } public Lista insertarCabezaLista(int entrada) { Nodo nuevo ; nuevo = new Nodo(entrada); nuevo.enlace = primero; primero= nuevo; return this; } public void visualizar() { Nodo n; int k = 0;

}

n = primero; while (n != null) { System.out.print(n.dato + " "); n = n.enlace; k++; System.out.print( (k%15 != 0 ? " " : "\n")); }

} // clase con método main import java.util.*; import ListaEnteros.*;

public class ListaAleatoria { public static void main(String [] a) { Random r; int d; Lista lista; int k; r = new Random(); lista = new Lista(); // crea lista vacía k = Math.abs(r.nextInt() % 55); // número de nodos // Son insertados elementos en la lista for (; k > 0; k-- ) { d = r.nextInt() % 99 ; lista.insertarCabezaLista(d); } // recorre la lista para escribir sus elementos System.out.println("Elementos de la lista generados al azar"); lista.visualizar(); }

}

EJERCICIO 8.2 import java.util.*; import ListaEnteros.ListaOrdenada; public class ListaEnOrden { public static void main(String [] a) { Random r; int d; ListaOrdenada lista; int k; r = new Random(); // generador de números aleatorios lista = new ListaOrdenada(); // crea lista vacía k = r.nextInt(99)+1; // número de elementos // inserta elementos en la lista for (; k >= 0; k-- ) { d = r.nextInt(); lista.insertaOrden(d); } // escribe los elementos de la lista System.out.println("Elementos de la lista ordenada \n"); lista.visualizar(); }

}

EJEMPLO 8.4 public Nodo buscarPosicion(int posicion) { Nodo indice; int i;

}

if (0 < posicion) // posición ha de ser mayor que 0 return null; indice = primero; for (i = 1 ;(i < posicion) && (indice != null); i++) indice = indice.enlace; return indice;

EJERCICIO 8.3 import java.util.Random; import java.io.*; import listaDobleEnlace.*; class ListaEnRango { public static void main(String [] ar) throws IOException { Random r; int d, x1,x2; final int M = 29; // número de elementos de la lista final int MX = 999; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); ListaDoble listaDb; r = new Random(); listaDb = new ListaDoble(); for (int j = 1; j <= M ; j++) { d = r.nextInt(MX) + 1; listaDb.insertarCabezaLista(d); } System.out.println("Elementos de la lista original"); listaDb.visualizar(); // rango de valores System.out.println("\nRango que va a contener la lista"); x1 = Integer.parseInt(entrada.readLine()); x2 = Integer.parseInt(entrada.readLine()); // IteradorLista iterador = new IteradorLista(listaDb); Nodo a;

} }

a = iterador.siguiente(); while (a != null) { int w; w = a.getDato(); if (!(w >= x1 && w <= x2)) // fuera de rango listaDb.eliminar(w); a = iterador.siguiente(); } System.out.println("Elementos actuales de la lista"); listaDb.visualizar();

EJERCICIO 8.4 package listaCircularPalabra; class Nodo { String dato; Nodo enlace; public Nodo (String entrada) {;} } public class ListaCircular { private Nodo lc; public ListaCircular(){;} public ListaCircular insertar(String entrada){;} public void eliminar(String entrada) { Nodo actual; actual = lc; while ((actual.enlace != lc) && !(actual.enlace.dato.equals(entrada))) { if (!actual.enlace.dato.equals(entrada)) actual = actual.enlace; } // Enlace de nodo anterior con el siguiente // si se ha encontrado el nodo.

}

if (actual.enlace.dato.equals(entrada)) { Nodo p; p = actual.enlace; // Nodo a eliminar if (lc == lc.enlace) // Lista con un solo nodo lc = null; else { if (p == lc) { lc = actual; // Se borra el elemento referenciado por lc, // el nuevo acceso a la lista es el anterior } actual.enlace = p.enlace; } p = null; }

public void borrarLista() { Nodo p; if (lc != null) { p = lc; do { Nodo t; t = p; p = p.enlace; t = null; // no es estrictamente necesario

}while(p != lc); } else System.out.println("\n\t Lista vacía."); lc = null; } public void recorrer(){;} } /* clase con el método main(). Se escribe un sencillo menu para elegir operaciones con la lista circular. */ import java.io.*; import listaCircularPalabra.*; class ListaPalabras { public static void main(String [] a) throws IOException { String palabra; ListaCircular listaCp; int opc; BufferedReader entrada = new BufferedReader( new InputStreamReader(System.in)); listaCp = new ListaCircular(); System.out.println("\n Entrada de Nombres. Termina con ^Z.\n"); while ((palabra = entrada.readLine())!= null) { String nueva; nueva = new String(palabra); listaCp.insertar(nueva); } System.out.println("\t\tLista circular de palabras"); listaCp.recorrer(); System.out.println("\n\t Opciones para manejar la lista"); do { System.out.println("1. Eliminar una palabra.\n"); System.out.println("2. Mostrar la lista completa.\n"); System.out.println("3. Salir y eliminar la lista.\n"); do { opc = Integer.parseInt(entrada.readLine()); }while (opc<1 || opc>3);

} }

switch (opc) { case 1: System.out.print("Palabra a eliminar: "); palabra = entrada.readLine(); listaCp.eliminar(palabra); break; case 2: System.out.println("Palabras en la Lista:\n"); listaCp.recorrer(); break; case 3: System.out.print("Eliminación de la lista."); listaCp.borrarLista(); } }while (opc != 3);

LISTA ORDENADA package ListaEnteros; public class ListaOrdenada extends Lista { public ListaOrdenada() { super(); } public ListaOrdenada insertaOrden(int entrada) { Nodo nuevo ; nuevo = new Nodo(entrada); if (primero == null) // lista vacía primero = nuevo; else if (entrada < primero.getDato()) { nuevo. setEnlace(primero); primero = nuevo; } else /* búsqueda del nodo anterior a partir del que se debe insertar */ { Nodo anterior, p; anterior = p = primero; while ((p.getEnlace() != null) && (entrada > p.getDato())) { anterior = p; p = p.getEnlace(); } if (entrada > p.getDato()) //inserta después del último nodo anterior = p; // Se procede al enlace del nuevo nodo nuevo.setEnlace(anterior.getEnlace()); anterior.setEnlace(nuevo); } return this; } // métodos a codificar: public void eliminar (int entrada){ ; } public Nodo buscarLista(int destino){ ; } }

LISTA DOBLEMENTE ENLAZADA package listaDobleEnlace; public class Nodo { int dato; Nodo adelante; Nodo atras; public Nodo(int entrada) { dato = entrada; adelante = atras = null; } public int getDato() {

return dato; } public Nodo getEnlace() { return adelante; } public void setEnlace(Nodo adelante) { this.adelante = adelante; } } package listaDobleEnlace; public class ListaDoble { Nodo cabeza; public ListaDoble() { cabeza = null; } public ListaDoble insertarCabezaLista(int entrada) { Nodo nuevo; nuevo = new Nodo(entrada); nuevo.adelante = cabeza; if (cabeza != null ) cabeza.atras = nuevo; cabeza = nuevo; return this; } public ListaDoble insertaDespues(Nodo anterior, int entrada) { Nodo nuevo; nuevo = new Nodo(entrada); nuevo.adelante = anterior.adelante; if (anterior.adelante !=null) anterior.adelante.atras = nuevo;

anterior.adelante = nuevo; nuevo.atras = anterior; return this; } public void eliminar (int entrada) { Nodo actual; boolean encontrado = false; actual = cabeza; // Bucle de búsqueda while ((actual != null) && (!encontrado)) { /* la comparación se realiza con el método equals()..., depende del tipo Elemento */ encontrado = (actual.dato == entrada); if (!encontrado) actual = actual.adelante; } // Enlace de nodo anterior con el siguiente if (actual != null) { //distingue entre nodo cabecera o resto de la lista if (actual == cabeza) { cabeza = actual.adelante; if (actual.adelante != null) actual.adelante.atras = null; } else if (actual.adelante != null) // No es el último nodo { actual.atras.adelante = actual.adelante; actual.adelante.atras = actual.atras; } else // último nodo actual.atras.adelante = null; actual = null; }

}

public void visualizar() { Nodo n; int k = 0; n = cabeza; while (n != null) { System.out.print(n.dato + " "); n = n.adelante; k++; System.out.print( (((k%10 != 0)&& (n!= null)) ? " " : "\n")); } }

}

ITERADOR DE LISTA DOBLE package listaDobleEnlace; public class IteradorLista { Nodo actual; public IteradorLista(ListaDoble ld) { actual = ld.cabeza; } public Nodo siguiente() { Nodo a; a = actual; if (actual != null) { actual = actual.adelante; } return a; } }

LISTA GENÉRICA // Declaración de la clase nodo package listaGenerica; public class Nodo { Object dato; Nodo enlace; public Nodo(Object x) { dato = x; enlace = null; } public Nodo(Object x, Nodo n) { dato = x; enlace = n; } public Object leerDato() { return dato; } public Nodo siguiente() { return enlace; } } // Declaración de la clase Lista. package listaGenerica; public class Lista { private Nodo primero; public Lista() { primero = null; } public Nodo leerPrimero() { return primero; } public Lista insertarCabezaLista(Object entrada) { Nodo nuevo ; nuevo = new Nodo(entrada) nuevo.enlace = primero; primero= nuevo; return this; } public Nodo leerPrimero() { return primero; } public Lista insertarLista(Nodo anterior, Object entrada) { Nodo nuevo;

nuevo = new Nodo(entrada); nuevo.enlace = anterior.enlace anterior.enlace = nuevo; return this; } public void eliminar (Object entrada) { Nodo actual, anterior; boolean encontrado; actual = primero; anterior = null; encontrado = false; // Bucle de búsqueda while ((actual!= null) && !actual.dato.equals(entrada)) { if (!actual.dato.equals(entrada)) { anterior = actual; actual = actual.enlace; } } if (actual != null) { // Se distingue entre que el nodo sea el cabecera // o del resto de la lista if (acual == primero) { primero = actual.enlace; } else { anterior.enlace = actual.enlace } actual = null; } }

}

public Nodo buscarLista(Object destino) // destino: dato que se busca en la lista. { Nodo indice; for (indice = primero; indice != null; indice = indice.enlace) if (indice.dato.equals(destino)) return indice; return null; } public void visualizar() { Nodo n; n = primero; while (n != null) { Sistem.out.print(n.dato + " "); n = n.enlace; } }

ITERADOR LISTA GENÉRICA package listaGenerica; public class ListaIterador { private Nodo prm, actual; public ListaIterador(Lista list) { prm = actual = list.leerPrimero(); }

}

public Object siguiente() { Object elemento = null; if (actual != null) { elemento = actual.leerDato(); actual = actual.siguiente(); } return elemento; } public void inicIter() { actual = prm; }

More Documents from "Laoska B."