viernes, 9 de mayo de 2014

Lista doblemente enlazada

/**
 * @(#)ListaDobleEnlazada.java
 *
 * este programa nos permite trabajar con listas doblemente enlazadas
 * y cuando insertamos un elemento que entre el rango de otros elementos
 * realiza un rutina para mover los elemento a un nodo temporal para
 * acomodar el nuevo en la secuencia requerida

 *
 * @author Ricardo Camacho Lamas
 * @version 1.00 2014/5/4
 */
 import java.util.Scanner;
class Nodo {
 int elemento;
 Nodo siguiente;
 Nodo anterior;
 
 public Nodo(int x)
 {
   elemento=x;
   siguiente=null;
   anterior=null;
 }
}
public class ListaDobleEnlazada {
       
    /**
     * Creates a new instance of <code>ListaDobleEnlazada</code>.
     */
    
 private static Nodo frente=null, fin=null;

    public ListaDobleEnlazada() {
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
         int opcion;         
        Scanner ent=new Scanner(System.in);

                 // Presentamos el menu de opciones a trabajar con lista
        do
        {
         System.out.println(" ");
         System.out.println("----------------------------------------------------------");
         System.out.println("Programa para manejo de Lista Enlazada Doble ");
         System.out.println("----------------------------------------------------------");
         System.out.println("              1.- Insertar elemento                              ");
         System.out.println("              2.- Eliminar elemento                            ");
         System.out.println("              3.- Presentar ascendente                        ");
         System.out.println("              4.- Presentar descendente                      ");
         System.out.println("              5.- Salir                                                  ");
         System.out.println("----------------------------------------------------------");
         System.out.println(" ");

       
         opcion=ent.nextInt();
       
         switch(opcion)
         {
          case 1: insertar();
            break;
            case 2: eliminar();
               break;
          case 3: presentara();
            break;
          case 4: presentarb();
            break;
          case 5: break;
         
          default: System.out.println("Opcion Equivocada");
            break;
            }
        } while(opcion!=5);
    }
   
//    Método para Insertar un elemento en la Lista
public static void insertar()
 {
    int valor;
 Nodo aux;
 Scanner ent=new Scanner(System.in);
 System.out.print("Ingrese el Dato: ");
 valor=ent.nextInt();
 aux=new Nodo(valor);
 {
 //si no hay nodos
 if(frente==null)
  {
  frente=new Nodo(valor);
  fin=frente;
  }
 // si por lo menos hay un nodo
  else
  {
 // creamos un nuevo nodo
   Nodo temp=aux;
 // si el nodo a insertar es menor que el primer dato
  if(temp.elemento<frente.elemento)
  {
   temp.siguiente=frente;
   frente.anterior=temp;
   frente=temp;
  }
 
 //
  else
   {
   aux=frente.siguiente;
   Nodo antes=frente;
   while(aux!=null && temp.elemento > aux.elemento)
   {
  aux=aux.siguiente;
  antes=antes.siguiente;
   }
  antes.siguiente=temp;
  temp.anterior=antes;
  if(aux!=null)
   {
  temp.siguiente=aux;
  aux.anterior=temp;
   }
  else
  fin=temp;
   }
  }
   }
 }
//    Método para Presentar los elementos de la lista de forma ascendente
public static void presentara()
 { Nodo aux;
 if (frente==null)
  System.out.println(" !!! Lista Vacia!!!");
 
  else
   for(aux=frente; aux!=null;)
   {
   System.out.println("Presentando elemento: "+aux.elemento);
   aux=aux.siguiente;
   }
 }

//    Método para Presentar los elementos de la lista de forma descendente
public static void presentarb()
 { Nodo aux;
 if (frente==null)
  System.out.println(" !!! Lista Vacia!!!");
 
  else
   for(aux=fin; aux!=null;)
   {
   System.out.println("Presentando elemento: "+aux.elemento);
   aux=aux.anterior;
   }
 }

 
//    Método para Eliminar un elemento de la Lista
    public static void eliminar()
  { Nodo aux;
        if(frente==null)
          System.out.println(" !!! Lista Vacia!!!");
        else{
         if (frente==fin)
          frente=fin=null;
          else
          {
           System.out.println("Eliminando elemento: "+fin.elemento);
           aux=fin.anterior;
              fin.anterior=null;
              aux.siguiente=null;
              fin=aux;
          }
          }
     }
}

No hay comentarios.:

Publicar un comentario