jueves, 23 de febrero de 2017

LISTAS ENLAZADAS

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.

Representa el dato a almacenar. Puede ser de cualquier tipo; en este ejemplo se trata de una lista de enteros.
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