martes, 22 de octubre de 2019

Listas Simplemente enlazadas


Nodo.java
·         Creamos una clase publica llamada nodo
o   Declaramos dato y siguiente
o   Luego creamos un constructor //con diferente parámetro
§  Inicializamos dato = d // d el dato que se tiene
§  Inicializamos siguiente = null // el nodo siguiente
o   Luego declaramos lo siguiente
§  Dato es igual a d
§  Y siguiente es igual a n
package letraslse;

public class Nodo {
   
    public String dato;
    public Nodo siguiente;
   
    //CONSTRUCTOR
   
    public Nodo(String d){
        this.dato = d;
        this.siguiente=null;
    }
   
    public Nodo(String d, Nodo n){
        dato =d ;
        siguiente = n;
    }
   
}
LetrasLSE.java
·         Instanciar objeto de la clase lista
o   Declaramos variable opción opcion y elemento el
o   Iniciar variable opcion = 0
o   Hacer un do while donde colocamos donde colocamos las opciones y donde va a ir el try case
o   Controlar errores (try – case)
o   opción va a ser igual a las opciones de menú (en este caso son 6 opciones)
o   menú de opciones con la variable opción (switch)
o   realizar cada una de las opciones dentro del menú
§  Agregar un elemento al inicio de la lista
package letraslse;

import javax.swing.JOptionPane;
import java.lang.String;

public class LetrasLSE {

    public static void main(String[] args) {
       
        Lista impLista = new Lista();
       
        int opcion=0;
        String el;
       
        do{
            try{
               
                opcion = Integer.parseInt(JOptionPane.showInputDialog(null,""
                            +"1. Agregar un elemento al inicio de la lista\n"
                            +"2. Agregar un elemento al final de la lista\n"
                            +"3. Mostrar los elementos de la lista\n"
                            +"4. Eliminar un elemento del inicio de la lista\n"
                            +"5. Eliminar un elemento especifico\n"
                            +"6. Salir","Opciones del programa",3));
                       
                switch(opcion){
                    case 1: //1. 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 2: //2. 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 3: //3. Mostrar los elementos de la lista
                        impLista.mostrarLista();
                    break;
                   
                    case 4: //4. Eliminar un elemento del inicio de la lista
                        el=impLista.borrarDelInicio();
                        JOptionPane.showMessageDialog
                            (
                                null,
                                "El elemento eliminado es "+el,
                                "Eliminando NODO del inicio",
                                JOptionPane.INFORMATION_MESSAGE
                            );
                    break;
                   
                    default:
                        JOptionPane.showMessageDialog(null, "Opcion incorrecta");
                    break;
                  
                    case 5://5. Eliminar un elemento especifico
                         try{el=JOptionPane.showInputDialog
                                    (
                                            null,
                                            "Ingrese el elemento a eliminar",
                                            "Eliminando Nodo...",JOptionPane.INFORMATION_MESSAGE
                                    );
                         impLista.borrarEspecifico(el);
                        
                         JOptionPane.showMessageDialog
                            (
                                null,
                                "El elemento eliminado es "+el,
                                "Eliminando NODO especifico",
                                JOptionPane.INFORMATION_MESSAGE
                            );
                         }catch(NumberFormatException n){
                            JOptionPane.showMessageDialog(null, "Error" + n.getMessage());
                        }
                        
                    break;
                       
                    case 6://6. Salir
                        JOptionPane.showMessageDialog(null, "Programa terminado...");
                    break;
                }
               
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Error"+ e.getMessage());
            }
        } while (opcion !=6);
    }   
}
Lista.java
·         Declaramos dos variables que son inicio y fin
·         luego creamos un constructor
o   donde inicio y fin es igual a nulo
//algoritmo para saber si la lista esta vacía
·         método tipo booleano
o   si inicio es igual a fin retornara verdadero true
o   si no retornara falso false
//algoritmo para agregar nodo al inicio
·         método tipo void
·         inicio igual nuevo nodo (elemento, inicio)
o   si fin es igual a null
§  entonces fin es igual a inicio
//algoritmo para agregar nodo al final
·         método tipo void
o   si no esta vacia
§  fin de siguiente es igula a nuevo (elemento)
§  fin es igual a fin de siguiente
o   entonces
§  inicio es igual a fin y es igual a nuevo (elemento)
//algoritmo para mostrar los datos
·         método tipo void
o   nodo recorrer es igual a inicio
o   mientras recorrer no sea igual a null
§  imprimir “recorrer.dato”
§  recorrer es igual recorrer de siguiente
//método para eliminar un nodo del inicio
·         elemento es igual a inicio de dato
·         si inicio es igual a fin a nulo
o   apuntar inicio y fin a nulo
·         si no entonces
o   retornar el valor del elemento
//algoritmo para eliminar un nodo especifico
·         si la lista no esta vacia
o   si inicio es igual a fin y elemento igual a inicio de dato
§  entonces apuntar inicio y fin a nulo
o   si no el elemento igual (inicio de dato)
§  entonces apuntar inicio a inicio de siguiente
o   si no entonces
§  crear un nodo temporal y anterior
§  apuntar anterior a inicio
§  apuntar temporal a inicio de siguiente
§  mientras temporal sea diferente de nulo y temporal de dato sea diferente de elemento
·         apuntar anterior anterior de siguiente
·         apuntar temporal a temporal de siguiente
§  si temporal sea diferente de nulo
·         apuntar anterior de siguiente a temporal de siguiente
·         si temporal es igual a fin
o   fin va a ser igual a anterior

package eliminariniciolse;

public class Lista {
   
    protected Nodo inicio,fin;
   
    //CONSTRUCTOR
   
    public Lista(){
        inicio = null;
        fin =null;
    }
   
    //METODO PARA SABER SI LA LISTA ESTA VACIA
   
        public boolean estaVacia(){
           
            if(inicio==fin){
                return true;
            }else{
                return false;
            }
        }
       
     //METODO PARA AGREGAR AL INICIO
       
        public void agregarAlInicio(int elemento){
       
        //creando nodo
       
        inicio = new Nodo(elemento, inicio);
       
            if(fin==null){
                fin=inicio;
            }
        }
       
        //Metodo para agreagr al final
        public void agregarAlFinal(int elemento){
            if(!estaVacia()){
                fin.siguiente = new Nodo (elemento);
                fin = fin.siguiente;
               
            }else{
                inicio = fin = new Nodo (elemento);
            }
        }
       
        //METODOD PARA MOSTRAR LOS DATOS
        public void mostrarLista(){
            Nodo recorrer = inicio;
            System.out.println("\n");
           
            while(recorrer != null){
                System.out.print("["+recorrer.dato+"] -->");
                recorrer = recorrer.siguiente;
            }
        }     
        //Metodo para eliminar del inicio
        public int borrarDelInicio(){
            int elemento = inicio.dato;
            if(inicio==fin){
                inicio = null;
                fin=null;
            }else{
                inicio = inicio.siguiente;
            }           
            return elemento;
        }       
        //Metodo para eliminar un nodo especifico
        public void borrarEspecifico(int elemento){
            if(!estaVacia())
                if(inicio==fin && elemento==inicio.dato){
                    inicio=fin=null;
                   
                }else if(elemento==inicio.dato){
                  inicio=inicio.siguiente; 
                }else{
                    Nodo anterior, temporal;
                    anterior=inicio;
                    temporal=inicio.siguiente;
                   
                    while(temporal != null && temporal.dato != elemento){
                        anterior=anterior.siguiente;
                        temporal=temporal.siguiente;                  
                    }         
                    if(temporal != null){
                        anterior.siguiente=temporal.siguiente;
                        if(temporal==fin){
                            fin=anterior;
                        }
                    }
                }
        }
    int borrarEspecifico() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}



No hay comentarios.:

Publicar un comentario

Introduccion

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