22 diciembre 2013

Listas Doblemente Enlazadas

Hola! muy buenas noches. Se que me he tardado en escribirles pero es q no habia tenido el tiempo necesario para poder publicarles pero bueno ya que librado mis materias pues me he decidido a continuar con los tutoriales de programacion. Como este cuatrimestre que he aprobado curse la materia de Estructura de datos he habladdo sobre las listas simples. pues ahora les vengo a hablar sobre las listas doblemente enlazadas. Comenzemos! Las listas doblemente enlazadas (al igual que en todas las estructuras de datos) se basan en unir un objeto con otro usandolo de referencia para poder guardar uno o varios tipos de datos u objetos(si se le ocupase) como por ejemplo tipos de datos String, char, int, double o si elegimos objetos puede ser un label, textfield, textarea o panel todo depende de nuestra necesidad. Bueno para poder realizar la lista doblemente enlazada tenemos que crear la estructura base. esta debe contener dos objetos del mismo tipo y el o los datos que queremos que guarde. Algo como esto.


public class lista_doble{
   lista_doble ant; //objeto que nos servira para la referencia de atras
   lista_doble sig; //objeto que nos servira para la referencia de adelante
   int dato;        //tipo de dato que guardaremos
}

Bueno despues debemos crear lo que es los metodos y la lista. nos basaremos en el siguiente codigo:




import java.util.Scanner;
public class principal{
 lista_doble inicio;
 lista_doble ultimo;
 lista_doble aux;

 public void insertar_adelante(int i){
  aux = new lista_doble(i);
  if(inicio != null && ultimo != null){
   ultimo.sig = aux;
   aux.ant = ultimo;
   ultimo = aux;
  }else{
   inicio = aux;
   ultimo = inicio;
  }
 }
 
 public void insertar_atras(int i){
  aux = new lista_doble(i);
  if(inicio != null && ultimo != null){
   inicio.ant = aux;
   aux.sig = inicio;
   inicio = aux;
  }else{
   inicio = aux;
   ultimo = inicio;
  }
 }
 
 public void imprimir(){
  if(inicio != null){
   aux = inicio;
   int i = 1;
   while(aux != null){
    System.out.println("nodo "+i+" "+aux);
    aux = aux.sig;
    i++;
   }
  }
 }
 
 public void eliminar_final(){
  if(inicio != null){
   ultimo = ultimo.ant;
  }else{
   inicio = null;
   ultimo = null;
  }
 }
 
 public void eliminar_principio(){
  if(inicio != null){
   inicio = inicio.sig;
  }else{
   inicio = null;
   ultimo = null;
  }
 }
 
 public static void main(String a []){
  principal obj = new principal();
  Scanner l = new Scanner(System.in);
  int opc = 100;
  while(opc != 0){
   System.out.print(""+
   "\t>Listas Doblemente Enlazadas<\n"+
   "1.-Insertar al principio\n"+
   "2.-Insertar al final\n"+
   "3.-Imprimir\n"+
   "4.-Borrar al principio\n"+
   "5.-Borrar al final\n"+
   "->");
   opc = l.nextInt();
   switch(opc){
    case 1:
     System.out.print("dame un numero: ");
     obj.insertar_atras(l.nextInt());
    break;
    
    case 2:
     System.out.print("dame un numero: ");
     obj.insertar_adelante(l.nextInt());
    break;
    
    case 3:
     obj.imprimir();
    break;
    
    case 4:
     obj.eliminar_principio();
    break;
    
    case 5:
     obj.eliminar_final();
    break;
    
    case 0:
     System.exit(0);
    break;
   }
  }
 }
}
El codigo no lo compile asi q supongo ha de tener algunos errores, espero me comprendan y si tienen algun problemas no duden en dejarme un comentario o mensaje via Facebook :d gracias por visitarme.