/**
* @(#)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