La lista enlazada
Es un TDA que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinámica, por lo que no tenemos que saber "a priori" los elementos que puede contener.
En una lista enlazada, cada elemento apunta al siguiente excepto el último que no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos de una lista, suelen recibir también el nombre de nodos de la lista.
Es un puntero al siguiente elemento de la lista; con este puntero enlazamos con el sucesor, de forma que podamos construir la lista.
struct lista {
gint dato;
lista *siguiente;
};
CLASE NODO
public class Nodo {
private float dato;
private Nodo siguiente;
public Nodo(float dato){
this.dato=dato;
this.siguiente=null;
}
public Nodo(float dato, Nodo siguiente){
this.dato=dato;
this.siguiente=siguiente;
}
public float getDato() {
return dato;
}
public void setDato(float dato) {
this.dato = dato;
}
public Nodo getSiguiente() {
return siguiente;
}
public void setSiguiente(Nodo siguiente) {
this.siguiente = siguiente;
}
}
CLASE LISTA
public class Lista {
Nodo inicio;
Nodo fin;
public Lista() {
inicio=null;
fin=null;
}
public void agregarNodoAlInicio(int dato){//permite agregar nodos al final de la lista
Nodo nuevo=new Nodo(dato);
nuevo.setSiguiente(inicio);
inicio=nuevo;
if(fin==null)
fin=nuevo;
}
public void agregarNodoAlFinal(int dato){//Permite agregar nodos al final de una lista
Nodo nuevo=new Nodo(dato);
if(fin!=null){
fin.setSiguiente(nuevo);
fin=nuevo;
}
else{
fin=nuevo;
inicio=nuevo;
}
}
public void recorreLista(){//Esta metodo permite la impresion de la lista
Nodo aux=inicio;
while(aux!=null){
System.out.println(aux.getDato());
aux=aux.getSiguiente();
}
}
public void eliminarNodos(int numero)//permite eliminar los nodos que superen un valor dado
{
if(inicio!=null)//comprueba si la lista esta vacia
{
if(inicio.getDato()!=numero)
{
inicio=fin=null;
}
else if((inicio==fin)&&(inicio.getDato()!=numero))
{
inicio=inicio.getSiguiente();
}
else
{
Nodo anterior=inicio;
Nodo siguiente=inicio.getSiguiente();
while((siguiente!=null)&&(siguiente.getDato()!=numero))
{
anterior=siguiente;
siguiente=siguiente.getSiguiente();
}
if(siguiente!=null)
{
anterior.setSiguiente(siguiente.getSiguiente());
if(siguiente==fin)
{
fin=anterior;
}
}
}
}
}
}
MAIN
public class Principal {
/**
* @param args the command line arguments
*/
public static int leerEntero(String texto){//
Scanner ingreso =new Scanner(System.in);
System.out.println(texto);
int dato=ingreso.nextInt();
return dato;
}
public static int menu(){//creacion del menu de opciones
System.out.println("---Menu---");
System.out.println("1. Agregar Final");
System.out.println("2. Recorrer lista");
System.out.println("3. Borar un elemento");
System.out.println("4. Salir");
int dato=leerEntero("Seleccione una opcion: ");
return dato;
}
public static void main(String[] args) {
// TODO code application logic here
int opcion;
Lista coleccion=new Lista();//llamado de la clase para el acceso a los metodos
do{
opcion=menu();
switch (opcion) {
case 1:
coleccion.agregarNodoAlFinal(leerEntero("Ingrese un valor: "));//Insertar nodos al final
break;
case 2:
System.out.println("Lista");//impresion de la lista
coleccion.recorreLista();
break;
case 3:
coleccion.eliminarNodos(leerEntero("Ingrese un valor: "));//Eliminar los nodos con un dato dado
break;
default:
System.out.println("Fin del programa!");;
}
}while(opcion!=4);
}
}
No hay comentarios.:
Publicar un comentario