Sie sind auf Seite 1von 7

Para empezar, habr que explicar lo que es una lista enlazada. Es un vector de dimensin variable.

Esto es que solamente utiliza la cantidad de elementos mnima necesaria. Por ejemplo, supongamos que tenemos un programa que gestiona los datos de los alumnos de una asignatura y el programa esta diseado para una cantidad mxima de 50 plazas. Si en un ao solamente hay 4 alumnos, no hay necesidad de declarar un vector de 50 elementos si solo vamos a usar 4, la memoria que necesitara es mucho menor si se manejan las listas que si utilizamos vectores. La forma que tiene de almacenar los valores es a traves de nodos, donde guarda todos los datos del elemento ms una referencia a otro nodo que representa el siguiente elemento de la lista. En Java viene a ser algo parecido a: public class Nodo{ public int dato; public Nodo next; public Nodo(int n){ dato=n; next=null; } } Public class Lista{ private Nodo start; // Primer nodo de la lista /** * Aade un nodo al final de la lista. */ public void add(int N){ Nodo aux=start; // Si la lista esta completamente vacia if(aux==null){ // Creamos el primer elemento aux=new Nodo(N);

}else{ // En caso contrario buscamos el ultimo y lo aadimos while(aux.next!=null) aux=aux.next; aux.next=new Nodo(N); } } /** * Borra el primer nodo cuyo dato coincida con el parametro N */ public void remove(int N){ Nodo aux=start; // Comprobamos si es el primer nodo if(aux.dato==N){ // Si lo es entonces hacemos que el primer nodo sea el segundo start=aux.next; }else{ // Vamos saltando los nodos que no coincidan hasta // que encontremos uno o se acabe la lista while(aux.next!=null && aux.next.dato!=N) aux=aux.next; // Si la lista no ha acabado if(aux.next!=null){ // saltamos al siguiente aux.next=aux.next.next; } } } } Este ejemplo es una forma sencilla y simplona de manejar listas, pero tiene muchas lagunas como el acceso a un nodo, aadir en una posicin distinta al final, etc. (que esperabais, no os voy a dar todo el trabajo hecho, solo quiero que entendis como funciona esto).

Este sistema tiene mltiples ventajas. Primero, solamente usa la cantidad de memoria estrictamente necesaria. Otra ventaja es que el limite de elementos no esta definido, esto quiere decir que puede haber tantos elementos como memoria que pueda conservarlos. Adems de tener ventajas, tambien tiene sus desventajas. Por ejemplo, la forma de aadir o quitar elementos hay que definirla a traves de metodos, al igual que acceder a un elemento para utilizar su informacin. A la hora de acceder a un elemento, hay que buscarlo antes de forma secuencial, es decir, de principio a fin, y esto en una lista larga con muchos datos en cada elemento puede ralentizar el programa bastante.

Esta es la estructura de una lista enlazada, pero hay ms tipos de listas: Las doblemente enlazadas y los rboles. Una lista doblemente enlazada tiene dos referencias a dos elementos, una al siguiente nodo o nulo si es el final de la lista, y otra al nodo anterior de la lista o nulo si es el inicio de esta.

Un rbol tiene como minimo dos referencias a nodos, uno al nodo Padre y los otros a el/los nodo/s hijo. Esto significa que un nodo no puede tener ms de un padre, pero no significa que no pueda tener ms de un hijo.

Mi consejo es que si se pueden usar vectores y matrices, se usen, ya que a la hora de programar esto se puede volver un trabajo bastante tedioso, pero existen porque a veces es mejor usar listas y otras estructuras dinmicas a usar vectores con un tamao fijo.

En java hay una clase que ya se encarga del funcionamiento de listas enlazadas que es la clase java.util.LinkedList.

class InsertaNumeros{ public static void main (String arg[]){ Lista lista; lista = new Lista (); lista.crearLista(); lista.mostrarLista(); } } class Lista { Nodo primero; public Lista (){ primero=null; } Lista crearLista(){ primero = new Nodo(8); primero = new Nodo (17, primero); primero = new Nodo (1, primero); return this; } void mostrarLista(){ Nodo n; n=primero; while (n != null){ System.out.println(n.dato); n=n.enlace; } } } class Nodo { int dato; Nodo enlace; public Nodo(int x){ dato=x; enlace=null; } public Nodo (int x, Nodo n){ dato=x; enlace=n; } }

primero debes crear el nodo public class Nodo{ Nodo siguiente; int dato1; String datos2; public Nodo(){ } } luego creas una lista de nodos donde tienes que tener un elemento que en todo momento(referencie) sepa cual es el comienzo de la lista cada vez que se crea un nodo el nodo anterior tiene como siguiente el nodo que se acaba de crear y el siguiente de este es null

/* * Lista Simplemente enlazada. * */ /** * * @author Pain */ //Clase Nodo. Utiliza el enlace llamado nodoDer o nodo derecho y el valor a introducir. public class Nodo { Nodo nodoDer; int dato; public Nodo(int dato) { this.dato = dato; this.nodoDer = null; } } /* * Clase de Lista enlazada y metodos de agregar al final y borrar del mismo, asi como mostrar tamao y visualizar lista. * */

import javax.swing.JOptionPane; /** * * @author Pain */ public class ListaS { private Nodo primero; private Nodo ultimo; private int tamano; public ListaS() { this.primero = null; this.ultimo = null; this.tamano = 0; } //Metodo utilizado para denotar que la lista se encuentra vacia. public boolean siVacio() { return (this.primero == null); } //Metodo para agregar al final de la lista. public ListaS addLast(int dato) { if(siVacio()) { Nodo nuevo = new Nodo(dato); primero = nuevo; ultimo = nuevo; nuevo.nodoDer = nuevo; } else { Nodo nuevo = new Nodo(dato); nuevo.nodoDer = null; ultimo.nodoDer = nuevo; ultimo = nuevo; } this.tamano++; return this; } //Metodo para borrar al final de la lista. public Nodo deleteLast() { Nodo eliminar = null; if(siVacio()) { JOptionPane.showMessageDialog(null, "La lista se encuentra vacia"); return null; } if(primero == ultimo) { primero = null;

ultimo = null; } else { Nodo actual = primero; while(actual.nodoDer != ultimo) { actual = actual.nodoDer; } eliminar = actual.nodoDer; actual.nodoDer = null; ultimo = actual; } this.tamano--; return eliminar; } //Metodo que imprime el tamao de la lista. public void tamano() { JOptionPane.showMessageDialog(null, "El tamao es:\n " + this.tamano); } //Metodo que imprime la lista y los valores ingresados. public void imprimir() { if(tamano != 0) { Nodo temp = primero; String str = ""; for(int i = 0; i < this.tamano; i++) { str = str + temp.dato + "\n"; temp = temp.nodoDer; } JOptionPane.showMessageDialog(null, str); } } }

Das könnte Ihnen auch gefallen