Publicado el Viernes 16 de septiembre de 2005 a las 10:03:27 por sedica
Lecturas
Listas enlazadas en Java:
Para empezar, habrá que explicar lo que es una lista enlazada. Es un vector de dimensión variable. Esto es que solamente utiliza la cantidad de elementos mínima necesaria.
Por ejemplo, supongamos que tenemos un programa que gestiona los datos de los alumnos de una asignatura y el programa esta diseñado para una cantidad máxima de 50 plazas. Si en un año solamente hay 4 alumnos, no hay necesidad de declarar un vector de 50 elementos si solo vamos a usar 4, la memoria que necesitaría 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 más 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 /** * Añade 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 añadimos 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, añadir en una posición distinta al final, etc. (que esperabais, no os voy a dar todo el trabajo hecho, solo quiero que entendáis como funciona esto).
Este sistema tiene múltiples 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.
Además de tener ventajas, tambien tiene sus desventajas. Por ejemplo, la forma de añadir o quitar elementos hay que definirla a traves de metodos, al igual que acceder a un elemento para utilizar su información. 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 más 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 más de un padre, pero no significa que no pueda tener más 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 dinámicas a usar vectores con un tamaño fijo.
En java hay una clase que ya se encarga del funcionamiento de listas enlazadas que es la clase java.util.LinkedList.
Hola que tal, es muy buen aporte y me ayudo mucho para unas cosas que debia hacer con listas, nada mas que encontre un error en el codigo en tu codigo tienes
if(aux==null){
aux=new Nodo(N); //Aqui esta el error
}else{.....
El problema con este error es que nunca creas la lista, siempre guardas los datos en el nodo aux porque start siempre queda en null y asi se pierde la información si intentas ingresar... para solucionar esto solo es necesario cambiar esa linea por:
bueno yo no soy una master ni un genio de la programacion y estoy intentando hacer algo con mi vida asi que espero mi pregunta no te insulte...
veras yo no se crea esto (lo que creo es una clase)
public Nodo(int n){
dato=n;
next=null; //(y porque el nodo siguiente se tiene
//que igualar a null)
Bueno amiga en realidad lo que esta haciendo alli es un constructor lo cual, en los constructores lo primero que se hace es inicializar variables, por lo que el valor siguiente se inicializa vacio(null) para luego llenarlo
Necesito codigo para insertar un elemento en una lista doblemente enlazada en java. URGENTE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!