Tema: Estructura de datos
Pregunta: Que son y como se comen las Lista dinámicas simples??
Respuesta: Ok, pongo este FAQ para beneficio de todos!! Una lista simple es una estructura de datos donde los elementos de esta están enlazados en forma secuencial, a diferencia de las pilas y las colas, puedes acceder a cualquier elemento de la lista. Para agregar nuevos elementos ala lista hay diferentes maneras, por ejemplo puedes agregar un elemento al final o al principio de la lista, o también siguiendo un orden ascendente o descendente de los elementos, en fin, eso depende de lo que necesites hacer con las listas, el criterio de acceso también es de acuerdo a las necesidades.
Lo que haremos en esta ocasión será hacer una lista con la opción de agregar nodos al final, podremos sacar los nodos dándole el numero de nodo que querremos sacar, un método para imprimir la lista, un método que nos dirá cuantos nodos tenemos, un método que eliminara un nodo de la lista.
OK, aquí los métodos:
add(Nodo nodo) -> Agrega nodos al final de la lista
get(int index) -> Obtener el nodo de acuerdo al indice requerido
size() -> nos dira el numero de nodos que hay en la lista
print() -> imprimira la lista
remove(int index) -> Eliminara un nodo de la lista
Ok, nuestra lista será algo asi:
7 -> 2-> 5 ->1 -> null
^
Root
Si queremos agregar el número 10, la lista quedaría así:
7 -> 2-> 5 ->1 -> 10 -> null
^
Root
Ok, pasemos a JAVA, vamos a lista con información de clientes. Aquí el
Nodo.java Código PHP:
/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:20:45 PM
* Modified: Sunday, October 17, 2005 11:20:45 PM
*/
public class Nodo{
//puntero al siguiente nodo
public Nodo ptr;
// puedes poner todos los datos que quieras
public String nombre;
public String apellido;
public int edad;
//constructor por default es NULL, porque sera el ultimo de la lista
public Nodo(){
ptr = null;
}
}
OK, ahora hagamos la
lista.java Código PHP:
/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:30:26 PM
* Modified: Sunday, October 17, 2005 11:30:26 PM
*/
public class Lista{
//el puntero al primer elemento
private Nodo root;
//el total de nodos en la lista
private int numNodos;
//el constructor inicializa las variables
public Lista(){
root = null;
numNodos = 0;
}
//Agrega un nodo a la lista
public void add(Nodo newNodo){
//puntero temporal para recorreme en la lista
Nodo tmp = root;
//si la lista esta vacia
if(tmp==null){
//lo agregamos al root
root = newNodo;
}else{
//de lo contrario nos recorremos hasta el ultimo
while(tmp.ptr!=null)
tmp = tmp.ptr;
//en el ultimo hacemos el enlace
tmp.ptr = newNodo;
}
//incrementamos el numero de nodos
numNodos++;
}
//regresa un nodo dela lista deacuerdo al indice dado
public Nodo get(int index){
Nodo info = null;
//revisamos que el indice este dentro del rango
if(index < numNodos && index >= 0){
//puntero para recorrenos desde el principio hasta el indice
Nodo tmp = root;
//revisamos que la lista no este vacia
if(tmp==null)
System.out.println("La lista esta vacia");
else if(index == numNodos-1){
//si es el ultimo nodo el que queremos, nos movemos hasta el final
while(tmp.ptr!=null)
tmp = tmp.ptr;
//hacemos la copia
info = tmp;
}else{
//nos recorremos hasta donde el indice nos permita
int i=0;
do{
info = tmp;
tmp = tmp.ptr;
i++;
}while(i<=index);
}
}else{
System.out.println("Fuera del rango");
}
//regresamos el nodo
return info;
}
//elimina un nodo deacuerdo al indice dado
public void remove(int index){
//revisamos que el indice este dentro del rango
if(index < numNodos && index >= 0){
//puntero para movernos en la lista
Nodo tmp = root;
//ravisamos que no este vacia
if(tmp==null)
System.out.println("La lista esta vacia");
else if(index == numNodos-1 && index>0){
//si es el ultimo nodo de la lista
while(tmp.ptr.ptr!=null)
//nos movemos hasta uno antes del final
tmp = tmp.ptr;
//eliminamos el enlace
tmp.ptr = null;
//decrementamos el total de nodos
numNodos--;
System.out.println("Borrado con exito!!");
}else{
//si es el primer nodo
if(index == 0){
//movemos el root al siguiente nodo, entonces el primero lo perdemos
root = tmp.ptr;
}else{
//nos movemos hasta un nodo antes del indice
int i=0;
while(i<index-1){
tmp = tmp.ptr;
i++;
}
//enlazamos el nodo anterior al indice, haciendo una especie de salto
//al nodo que querremos eliminar, de tal manera que el que queremos eliminar
//quede afuera de la lista
tmp.ptr = tmp.ptr.ptr;
}
//decrementamos el total de nodos
numNodos--;
System.out.println("Borrado con exito");
}
}else{
System.out.println("Fuera del rango");
}
}
//regresa el numero de nodos en la lista
public int size(){
return numNodos;
}
//imprime la lista de nodos
public void print(){
//puntero que se movera sobre la lista
Nodo tmp = root;
//sercirandonos que no este vacia
if(tmp==null){
System.out.println("La lista esta vacia :(");
}else{
//nos movemos hasta el final imprimiendo nodo por nodo
int i=0;
do{
System.out.println("-------------");
System.out.println("Indice-> "+i);
System.out.println(tmp.nombre);
System.out.println(tmp.apellido);
System.out.println(tmp.edad);
System.out.println("------\\/------");
tmp = tmp.ptr;
i++;
}while(tmp.ptr!=null);
//imprimimos el ultimo nodo que visitamos
System.out.println("-------------");
System.out.println("Indice-> "+i);
System.out.println(tmp.nombre);
System.out.println(tmp.apellido);
System.out.println(tmp.edad);
System.out.println("------\\/------");
}
}
}
ahora, vamos a hacer una aplicacion que utilice nuestra lista,
Implementa.java Código PHP:
/*
* Author: Crysfel Villa
* Created: Sunday, October 17, 2005 11:58:15 PM
* Modified: Sunday, October 17, 2005 11:58:15 PM
*/
public class Implementa {
public static void main(String arg[]){
Lista lista = new Lista();
//llenamos la lista
for(int i=0;i<10;i++){
Nodo nodo = new Nodo();
nodo.nombre = "nombre"+i;
nodo.apellido = "apellidos";
nodo.edad = 10+i;
//vamos agregandole nodos
lista.add(nodo);
}
System.out.println("elementos-> "+lista.size());
lista.print();
lista.remove(9);
lista.remove(0);
lista.remove(10);
lista.remove(5);
System.out.println("elementos-> "+lista.size());
lista.print();
System.out.println("----------");
Nodo sacado = lista.get(2);
if(sacado!=null) System.out.println(sacado.edad);
sacado = lista.get(9);
if(sacado!=null) System.out.println(sacado.edad);
sacado = lista.get(0);
if(sacado!=null) System.out.println(sacado.edad);
sacado = lista.get(100);
if(sacado!=null) System.out.println(sacado.edad);
System.out.println("elementos-> "+lista.size());
}
}
Bueno, espero que halla quedado claro el concepto y que le pueda servir a alguien!!
have funnnnnnnnn