Sunteți pe pagina 1din 4

Listas enlazadas Publicado el Viernes 16 de septiembre de 2005 a las 10:03:27 por sedica Votar: 26 votos, 79% Lecturas: 55,888

Listas enlazadas en Java: 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.

S-ar putea să vă placă și