miércoles, 21 de septiembre de 2011

MENU DE LISTAS LIGADAS SIMPLES EN JAVA

BUENO AMIGOS DE LA CARRERA DE MECATRONICA Y A TODA LA GENTE QUE SE DIO LA OPORTUNIDAD DE LEER ESTO AQUI LES SUBO LA TAREA DE ESTA SEMANA DE PROGRAMACION QUE SON LAS LISTAS LIGADAS TERMINADOS TODOS LOS CASOS Y JALANDO A TODA MADRE BUENO JENTE DISFRUTENLO.......... Y POR FAVOR SI LO VAN A COPIAR Y PEGAR POR FAVOR DE PERDIDA COMENTEN Y AGRADESCAN QUE ME MATE HACIENDO ESTO HAHAHAHAHA NO ES CIERTO NO POR ALGO SOMOS EL #1 EN EL CONCURSO DE PROGRAMACION BASICA.

EL PRIMER ARCHIVO SE DEBE DE LLAMAR NODOLISTA Y ASI QUEDARA:

///clase (registro) que sirve para generar nodos de dos tipos de formas (2 constructores)

public class NodoLista {
    // 2 campos
    Object Info;
    NodoLista Liga;
   
    //PRIMER CONSTRUCTOR
    public NodoLista(Object dato){
        Info = dato;
        Liga = null;
    }
   
    //SEGUNDO CONSTRUCTOR
    public NodoLista(Object dato, NodoLista liga){
        Info = dato;
        this.Liga = liga;  /////el this solo es para decir que la primera "liga"
    }                          ////es global
}


ESTE ES EL ARCHIVO LLAMADO  LISTA , ES DONDE SE REALIZAN LAS FUNCIONES PARA EJECUTAR LOS CONSTRUCTORES, ASI DEBE DE QUEDAR:


//// clase que manipula a los punteros para manipular los nodos en la memoria

public class Lista{
    // declarar los punteros!!!
    NodoLista Primero, ultimo, aux, nuevo, ant, post;
   
    public Lista(){
        Primero = ultimo = aux = nuevo = ant = post = null;
    }
   
    public void insertarAlFrente(Object dato){
        if(Primero==null){// si la lista esta vacia
            Primero = new NodoLista(dato);
            ultimo=Primero;
        }
        else{////ya hay mas nodos en la lista
            nuevo = new NodoLista(dato);
            ultimo.Liga = nuevo;
            ultimo = nuevo;
        }despliegaLista();         
    }
   
    public void insertarAtras(Object dato){
        if(Primero==null){// si la lista esta vacia
            Primero = new NodoLista(dato);
            ultimo=Primero;
        }
        else{
            nuevo = new NodoLista(dato,Primero);
            Primero = nuevo;
        }despliegaLista();
    }   
   
    public void despliegaLista(){
        aux = Primero;
        System.out.println ("##########LISTA COMPLETA#########");
        while (aux != null) {
            System.out.println (aux.Info);
            aux = aux.Liga;
        }
        System.out.println ("##########LISTA COMPLETA#########");
    }
    /////////INSERTAR ANTES DE //////////
    public void insertarAntesDe(Object DatoB,Object DatoI){
        if(Primero==null){
            System.out.println ("lista vacia");
        }
        else{/////hay datos
            if(buscar(DatoB)== true){
                ///////EMPEZAR A REALIZAR EL METODO
                if(aux==Primero){///caso 1
                nuevo= new NodoLista(DatoI,Primero);
                Primero = nuevo;
                }
                else{//en caso de que no este al inicio de la lista
                    nuevo = new NodoLista(DatoI , aux);
                    ant.Liga = nuevo;
                }
            }   
        }
        despliegaLista();
    }
    //////////////INSERTAR DESPUES DE//////////////////
    public void insertarDespuesDe(Object DatoB, Object DatoI){
        if(Primero==null){
            System.out.println ("lista vacia");
        }
        else{///hay metodos
            if(buscar(DatoB)== true){
                //////EMPEZAR A REALIZAR EL METODO/////
                if(aux==Primero){
                    nuevo=new NodoLista(DatoI);
                    Primero.Liga=nuevo;
                }
                else{///en caso de que no este al inicio de la lista
                    nuevo= new NodoLista(DatoI, aux.Liga);
                    aux.Liga=nuevo;
                }
               
            }
        }despliegaLista();
    }
   
    ///////////////METODO ELIMINAR NODO//////////////
    public void eliminarNodo(Object DatoB){
        if(Primero==null){
            System.out.println ("lista vacia");
        }
        else{
            if(buscar(DatoB)==true){///hacer cuatro casos
                if(Primero==ultimo){//// 1 caso
                    Primero=ultimo=null;
                }
                else if(aux==Primero){
                    Primero=aux.Liga;
                    aux=null;
                }
                else if(aux==ultimo){
                    ultimo=ant;
                    ultimo.Liga=null;
                    aux=null;
                }
                else{
                    ant.Liga=aux.Liga;
                    aux=null;
                }
            }
        }despliegaLista();
    }
   
    /////////////METODO PARA SUSTITUIR DATO///////////////
    public void modificaLista(Object DatoB,Object DatoI){
        if(Primero==null){
            System.out.println ("lista vacia");
        }
        else{
            if(buscar(DatoB)==true){
                aux.Info=DatoI;
            }
        }despliegaLista();
    }
    //////////////////////////METODO BUSCAR/////////
    public boolean  buscar(Object DatoB){
        aux = Primero;
        boolean bandera = false;
        while (aux != null && bandera != true) {
            if(DatoB.equals(aux.Info)){// si encuentra el dato
                bandera = true;
            }
            else{//apunta al siguiente nodo
                ant = aux;
                aux = aux.Liga;
                post = aux.Liga;
            }
        }
        if(bandera == true){
            return true;
        }
        else{
            System.out.println ("ese dato no existe");
            return false;
        }
    }
   
}


ESO FUE EL ARCHIVO LISTA Y ESTE ES EL ARCHIVO APPLISTA , ES DONDE SE LLAMARAN A LAS FUNCIONES ASI DEBE DE QUEDAR:


import java.util.Scanner;
class AppLista{
    public static void main(String args[]){
        Lista lista = new Lista();
        Integer DatoB,DatoI;
        int opcion;
      
        //Inicializacion del teclado
        Scanner Teclado = new Scanner(System.in);
        do{
            System.out.println ("1) Insertar al frente");
            System.out.println ("2) Insertar al Atras");
            System.out.println ("3) Insertar Antes de");
            System.out.println ("4) Insertar Despues de");
            System.out.println ("5) Eliminar Dato");
            System.out.println ("6) Modificar Dato");
            System.out.println ("7) DesplegarLista");
            System.out.println ("8) Salir");
            opcion = Teclado.nextInt();
            switch (opcion) {
                case 1: System.out.println ("Que dato quieres insertar al frente de la Lista:  ");
                        DatoI = new Integer(Teclado.nextInt());
                        lista.insertarAlFrente(DatoI);
                        break;
                case 2: System.out.println ("Que dato quieres insertar Atras de la Lista:  ");
                        DatoI = new Integer(Teclado.nextInt());
                        lista.insertarAtras(DatoI);
                        break;
                case 3: System.out.println ("Que dato quieres insertar Antes de la Lista:  ");
                        DatoI = new Integer(Teclado.nextInt());
                        System.out.println ("Atras de que dato quieres insertar el :"+DatoI);
                        DatoB = new Integer(Teclado.nextInt());
                        lista.insertarAntesDe(DatoB,DatoI);
                        break;
                case 4: System.out.println ("Que dato quieres insertar Despues de la Lista:  ");
                        DatoI = new Integer(Teclado.nextInt());
                        System.out.println ("Despues de que dato quieres insertar el :"+DatoI);
                        DatoB = new Integer(Teclado.nextInt());
                        lista.insertarDespuesDe(DatoB,DatoI);
                        break;
                case 5: System.out.println ("Que dato quieres ELiminar de la Lista: ");
                        DatoB = new Integer(Teclado.nextInt());
                        lista.eliminarNodo(DatoB);
                        break;
                   case 6: System.out.println ("Que dato quieres buscar para sustituir: ");
                           DatoB = new Integer(Teclado.nextInt());
                           System.out.println ("Que dato quieres poner en el numero "+DatoB+":");
                           DatoI = new Integer(Teclado.nextInt());
                           lista.modificaLista(DatoB,DatoI);
                        break;
                   case 7: lista.despliegaLista();
                        break;
                case 8: System.out.println ("\tbye...\n");
                        break;                               
                default :System.out.println ("\topcion no valida intenta de nuevo\n");
            }
        }while (opcion != 8);
    }
}

ESO ES TODO COMPAÑEROS ASI QUE NO SEAN CABRAS Y COMENTEN DE PERDIDA PARA AGRADESER CABRONES!!!...




22 comentarios:

  1. no es que diga que estes mal o algo asi pero te podrias ahorrar todo con estas dos simples lineas:

    public void modificaLista(Object DatoB, Object DatoI){
    if(buscar(DatoB)==true)
    Aux.Info=DatoI;
    }

    ResponderEliminar
  2. y de hecho si esta mal porque nada mas tienes que sustituir el valor y tu estas creando uno nuevo

    ResponderEliminar
  3. esta chido mi chava pues asi ya nos evitaste trabajar mas, lo estoy revisando bien pero esta chido, ya me voy a poner mas al tiro porque le he guevoneado en esto de programacion

    ResponderEliminar
  4. mira juan no esta mal porque al crear uno nuevo con el valor que quieres y lo sustituyes en el mismo lugar del otro, como dijo el profre para que se elimine el otro archivo, solo redireccionas todos los terminos que lo apunten a el y solo la memoria lo elimina sin tener que modificar el dato interno. pero si esta bien y tambien tu solucion es valida porque lo que haces es sustituirlo internamente sin borrarlo y yo no yo creo uno nuevo y el anterior lo borro del sistema.....

    ResponderEliminar
  5. pero el programa esta bien logicamente y tambien corre perfecto no tiene fallas....

    ResponderEliminar
  6. ya te la sabes ramon que aqui estamos para servir voy a tratar de todas las tareas que nos dejen subirlas aqui bueno las mas importantes!!!! y gracias por tu comentario al igual que a juan

    ResponderEliminar
  7. ya lo correji estaba bien solo que lo mejore en dos metodos en el que me decia juan y en el de borrar.....hay quedo...

    ResponderEliminar
  8. una pregunta k hace esta parte del codigo public void modificaLista(Object DatoB,Object DatoI){
    if(Primero==null){
    System.out.println ("lista vacia");
    }
    else{
    if(buscar(DatoB)==true){
    aux.Info=DatoI;
    }
    }despliegaLista(); esta es la parte ala k me refiero por k no poner un system.out.println o algo asi ya que veo k esta en el caso 7 pero nose k es lo k realmente hace espero me entiendan
    }

    ResponderEliminar
  9. hola juan carlos con respecto a tu pregunta en la parte donde dice "despliegaLista();" , esta es una funcion que se define lineas atras, lo unico que hace es imprimir la lista completa aunque como tu dices se puede quitar y poner un solo system.out.println para imprimir el dato que se modifico. solo que en este ejemplo se imprime la lista completa para ver como queda ya modificado.
    por si a caso pongo la parte del codigo que realiza la funcion despliegaLista();

    public void despliegaLista(){
    aux = Primero;
    System.out.println ("##########LISTA COMPLETA#########");
    while (aux != null) {
    System.out.println (aux.Info);
    aux = aux.Liga;
    }
    System.out.println ("##########LISTA COMPLETA#########");
    }

    eso es lo que realiza esa funcion como ya te comente imprime la lista completa espero y te aclare con esto tus dudas.

    saludos.
    Ing.José Muñiz

    ResponderEliminar
  10. me sirvio de mucha ayuda! enserio gracias !!

    ResponderEliminar
  11. muy completo pero en la opcion 4 de insertar despues de, ya no aparecen los datos que ya estaban imsertados

    ResponderEliminar
  12. solo sirve para variables de tipo entero? y si quiero pasarle un array completo a la lista?

    ResponderEliminar
  13. y si quisiera agregar la opcion buscar como seria?

    ResponderEliminar