martes, 22 de octubre de 2019

Lista Doblemente Enlazadas

La diferencia entre las listas simplemente enlazada y las doblemente enlazada
Es que las doblemente enlazada contiene dos punteros uno apunta al nodo siguiente y otro apunta al nodo anterior  y en la simplemente enlazada solo contiene un puntero 

para explicar mejor las listas doblemente enlazada observemos el siguiente ejemplo 


como podemos observar en la imagen anterior de 12 apunta a nulo, siguiente de 12 apunta a anterior de 57 inicio de 57 apunta a anterior de 95 y siguiente de 95 apunta a nulo, anterior de 95 apunta a siguiente de 57 y anterior de 57 apunta a siguiente de 12


a continuación les mostrare el siguiente ejercicio de lista doblemente enlazadas


ALGORITMOS DE LA CLASE LISTA

Declaramos dos variables que son inicio y fin de tipo privadas
Luego creamos un constructor
Donde inicio es igual a fin igual a nulo

·         Algoritmo para saber si la lista está vacía

Método de tipo booleano
Retornamos inicio igual de igual de nulo
*Donde retornamos verdadero porque la lista esta vacía

·         Algoritmo para agregar nodo al final

Método tipo void
Si no está vacía
Fin igual a nuevo (elemento, nulo, fin)
Fin de anterior de siguiente igual fin
Entonces
Inicio igual fin igual nuevo (elemento)

·         Algoritmo para agregar nodo al inicio

Método tipo void
Si no está vacía
Inicio igual nuevo (elemento, inicio, nulo)
Inicio de siguiente de anterior igual inicio
Entonces
Inicio igual fin igual nuevo (elemento)

·         Algoritmo para mostrar la lista de inicio a fin
Método void
Si no está vacía
Nodo Doble auxiliar igual inicio
Mientras (auxiliar no es igual a nulo)
Datos igual datos más auxiliar de datos
Auxiliar igual auxiliar de siguiente

·         Algoritmo para mostrar fin de inicio
 
Método void
Si no está vacía
Nodo Doble auxiliar igual fin
Mientras (auxiliar no es igual a nulo)
Datos igual datos más auxiliar de datos
Auxiliar igual auxiliar de anterior

package listadoblemente;

import javax.swing.JOptionPane;

public class ListaDoble {
    private NodoDoble inicio,fin;
   
    //CONSTRUCTOR DE LA LISTA
    public ListaDoble (){
        inicio=fin=null;
    }
   
    //METODO PARA SABER SI LA LISTA ESTA VACIA
    public boolean estaVacia (){
        return inicio == null;
    }
   
    //METODO PARA AGREGAR UN NODO AL FINAL
    public void agregarAlFinal(int el){
        if(!estaVacia()){
            fin=new NodoDoble(el,null,fin);
            fin.anterior.siguiente = fin;
        } else {
            inicio=fin=new NodoDoble(el);
        }
    }
   
    //METODO PARA AGREGAR AL INICIO
    public void agregarAlInicio(int el){
        if(!estaVacia()){
            inicio=new NodoDoble(el,inicio,null);
            inicio.anterior.siguiente = inicio;
        } else {
            inicio=fin=new NodoDoble(el);
        }
    }
   
    //METODO PARA MOSTRAR DE INICIO A FIN
    public void mostrarListaInicioFin(){
        if(!estaVacia()){
            String datos="<-->";
            NodoDoble auxiliar=inicio;
            while(auxiliar!=null){
                datos = datos + "[ " + auxiliar.dato + " ]" + "<-->";
                auxiliar = auxiliar.siguiente;
            }
           
            JOptionPane.showMessageDialog(null, datos, "Mostrando"
                    + "Lista de inicio a fin",JOptionPane.INFORMATION_MESSAGE);
        }
    }
   
     //METODO PARA MOSTRAR DE FIN A INICIO
    public void mostrarListaFinInicio(){
        if(!estaVacia()){
            String datos="<-->";
            NodoDoble auxiliar=fin;
            while(auxiliar!=null){
                datos = datos + "[ " + auxiliar.dato + " ]" + "<-->";
                auxiliar = auxiliar.anterior;
            }
           
            JOptionPane.showMessageDialog(null, datos, "Mostrando"
                    + "Lista de fin a inicio",JOptionPane.INFORMATION_MESSAGE);
        }
    }
}

ALGORITMOS DE LA CLASE NODOS

Declaramos dato, siguiente, anterior de tipo entero

Luego creamos un constructor para inicializar las variables
Dato igual a elemento
Siguiente igual de S
Anterior igual de A

En el segundo constructor para cuando no haya nodos
Mandamos a llamar el elemento
Y le colocamos nulo
Que nos dice que no tenemos ningún nodo

package listadoblemente;

public class NodoDoble {

    public int dato;
    NodoDoble siguiente,anterior;
   
    //CONSTRUCTOR CUANDO YA HAY NODOS
    public NodoDoble(int el, NodoDoble s, NodoDoble a){
        dato = el;
        siguiente = s;
        anterior = a;
    }
   
    //CONSTRUCTOR CUANDO NO HAY NODOS
    public NodoDoble (int el){
        this(el,null,null);
    }
}


ALGORITMOS PARA EL MAIN

- Instanciar objeto de la clase lista
- Declarar variables opción/opción y elemento/el
- iniciar variable opción = 0
-hacer
-un do while donde colocamos las opciones y donde va ir try case
-Controlar errores (try- catch)
-opción va a ser igual a las opciones de menú (en este caso son 5
opciones)

-menú de opciones con la variable opción (switch)
-realizar cada una de las opciones dentro del menú
-mientras opción sea diferente del número de opciones (en este caso 8)

package listadoblemente;

import javax.swing.JOptionPane;

public class ListaDoblemente {
    public static void main(String[] args) {
       
        ListaDoble impLista = new ListaDoble();
       
        int opcion=0;
        String el;
       
        do{
            try{
               
                opcion = Integer.parseInt(JOptionPane.showInputDialog(null,""
                            +"1. Agregar un elemento al final de la lista\n"
                            +"2. Agregar un elemento al final de la lista\n"
                            +"3. Mostrar los elementos de inicio a fin\n"
                            +"4. Mostrar los elementos de fin a inicio\n"
                            +"5. Salir","Opciones del programa",3));
                       
                switch(opcion){
                    case 1: //1. Agregar un elemento al final de la lista
                        try{
                            el=JOptionPane.showInputDialog
                                    (
                                            null,
                                            "Ingreso el elemento",
                                            "Insertando al final",3
                                    );
                           
                            impLista.agregarAlFinal(el);
                            
                        }catch(NumberFormatException n){
                            JOptionPane.showMessageDialog(null, "Error" + n.getMessage());
                        }
                    break; 
                   
                    case 2: //2. Agregar un elemento al inicio de la lista
                        try{
                            el=JOptionPane.showInputDialog
                                    (
                                            null,
                                            "Ingreso el elemento",
                                            "Insertando al inicio",3
                                    );
                           
                            impLista.agregarAlInicio(el);
                           
                        }catch(NumberFormatException n){
                            JOptionPane.showMessageDialog(null, "Error" + n.getMessage());
                        }
                    break;
                    
                    case 3: //3. Mostrar los elementos de inicio a fin
                        impLista.mostrarListaInicioFin();
                    break;
                   
                    case 4: //4. Eliminar un elementos de fin a inicio
                        impLista.mostrarListaFinInicio();
                    break;
                   
                    default:
                        JOptionPane.showMessageDialog(null, "Opcion incorrecta");
                    break;
                   
                    case 5://5. Salir
                        JOptionPane.showMessageDialog(null, "Programa terminado...");
                    break;
                }
               
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Error"+ e.getMessage());
            }
        } while (opcion !=5);
    } 
}



No hay comentarios.:

Publicar un comentario

Introduccion

https://app.emaze.com/mobile/@aozrctoiq?tgjs=0