miércoles, 28 de mayo de 2014

Clases en Java (Lista)

En   esta   forma   de   implementación,   una   lista   puede   definirse   como   un   dato
seguido de otra lista o como vacía.
Ejemplo: La lista  [1, 2, 3]  de manera recursiva puede verse así:
[1, 2, 3] = 1 -> [2,3] : 1 seguido de la lista [2, 3]
[2, 3] = 2 -> [3] : 2 seguido de la lista [3]
[3] = 3 -> [ ] : 3 seguido de una lista vacia

Y su implementación:


package negocio; /** * @author Ing. Angel Céspedes Quiroz * @facebook https://www.facebook.com/acq1305 * @mail angel@procesinc.com * @see <a href="http://www.procesinc.com">http://www.procesinc.com</a> * @version 1.0 17 de Noviembre de 2013 */ public class Lista { private Object dato; private Lista sig; /** * Constructor por defecto, crea una lista vacia. */ public Lista() { dato = null; sig = null; } /** * Crea una lista con un sólo dato. * * @param d es el único dato de la lista. */ public Lista(Object d) { dato = d; sig = new Lista(); } /** * Crea una lista a partir de otra * * @param otra */ public Lista(Lista otra) { dato = otra.dato; sig = otra.sig; } /** * Verifica si la lista está vacía. Una lista está vacía, cuando el dato y * la referencia a la siguiente lista son null. */ public boolean vacia() { return dato == null && sig == null; } /** * Añade un nuevo elemento al final de la lista. * * @param x es el nuevo elemento a ser insertado */ public void insertarFinal(Object x) { if (vacia()) { dato = x; sig = new Lista(); } else { sig.insertarFinal(x); } } /** * Añade un nuevo elemento al principio de la lista. * * @param x es el nuevo elemento a ser insertado */ public void insertarInicio(Object x) { sig = new Lista(this); dato = x; } /** * Inserta un nuevo dato sobre la lista en la posición especificada La * primera posición es 0. Si la posición destino no existe, entonces el * nuevo dato se inserta al final * * @param x es el dato a insertar * @param k es la posición donde debe insertarse */ public void insertar(Object x, int k) { if (vacia() || k == 0) { insertarInicio(x); } else { sig.insertar(x, k - 1); } } /** * Elimina el dato que sea igual al especificado * * @param x es el dato a buscar * @return el dato eliminado */ public Object eliminar(Object x) { Object res = null; if (!vacia()) { if (dato.equals(x)) { res = dato; dato = sig.dato; sig = sig.sig; } else { res = sig.eliminar(x); } } return res; } /** * Obtiene el tamaño de la lista * * @return la cantidad de elementos de la lista */ public int tamaño() { if (vacia()) { return 0; } return 1 + sig.tamaño(); } /** * Busca un elemento en la lista * * @param x es el elemento a ser buscado * @return el resultado de comprobar si el dato está en la lista. */ public boolean buscar(Object x) { if (vacia()) { return false; } if (dato.equals(x)) { return true; } return sig.buscar(x); } /** * Permite obtener un elemento de la lista de una posición especificada * * @param pos es la posición del objeto * @return el elemento de esa posición */ public Object obtener(int pos) { if (vacia()) { return null; } if (pos == 0) { return dato; } return sig.obtener(pos - 1); } /** * Devuelve en cadena a la lista [a,b,c....z] * * @return todos los elementos en formato cadena */ public String toString() { String res = "[" + resto() + "]"; return res; } //método recursivo que obtiene todos los elementos de la lista private String resto() { String res = ""; if (!vacia()) { res = dato.toString(); if (!sig.vacia()) { res = res + ", " + sig.resto(); } } return res; } /** * * @param pos La posición que debe modificarse * @param x El nuevo elemento */ public void modificar(int pos, Object x) { if (vacia() || pos < 0) { return; } if (pos == 0) { dato = x; } else { sig.modificar(pos - 1, x); } } /** * * @param pos la posición del elemento * @return el elemento de la posición */ public Object eliminar(int pos) { if (vacia()) { return null; } if (pos == 0) { Object res = dato; dato = sig.dato; sig = sig.sig; return res; } else { return sig.eliminar(pos - 1); } } /** * Método que me ayuda a probar los metodos */ public static void main(String[] args) { Lista lista = new Lista(); lista.insertarFinal("Hola Nena"); lista.insertarFinal(13); lista.insertarFinal(true); System.out.println(lista); } }

0 comentarios:

Publicar un comentario