miércoles, 18 de noviembre de 2015

Ejercicio 3 - Listas simples enlazadas

Enunciado:


Escribir un programa que realice las siguientes tareas:
  • Crear una lista enlazada de números enteros positivos al alzar, donde la inserción se realiza por el último nodo.
  • Recorrer la lista para mostrar los elementos por pantalla.
  • Eliminar todos los nodos que superen un valor dado.

Para realizar este ejercicio, al igual que los dos ejercicios anteriores se debe tener en cuenta las definiciones para crear nodos, y los metodos principales para agregar un inicio a la lista, agregar un fin a la lista, y eliminar un nodo de la lista, el método que elimina los números que superen un límite es similar al método estandar para eliminar nodos.

A continuación se muestra el código:

Clase Nodo:



public class Nodo {
 
 //Declaración de atributos
 private int dato;
 private Nodo siguiente;
 
 //Constructores de la clase Nodo
 public Nodo (int dato, Nodo siguiente)
 {
  this.dato=dato;
  
  this.siguiente=siguiente;
 }
 
 public Nodo (int datos)
 {
  this.dato=datos;
  this.siguiente=null;
 }
 
 //Metodos getter and setter
 public int getDato() 
 {
  return dato;
 }

 public void setDato(int dato) 
 {
  this.dato = dato;
 }

  public Nodo getSiguiente() 
  {
  return siguiente;
 }

 public void setSiguiente(Nodo siguiente) 
 {
  this.siguiente = siguiente;
 }
}

Clase Lista:


public class Lista 
{

 //Declaración de atributos
 private Nodo inicio;
 private Nodo fin;
 
 //Constructos de la clase Lista
 public Lista()
 {
  inicio=fin=null;
 }
 
 //Metodo para agregar un nodo al final
 public void agregarFin(int info)
 {
  
  Nodo nuevo = new Nodo(info, null);
 
  if(inicio==null)
  {
   inicio=fin=nuevo;
  }
  else
  {
   fin.setSiguiente(nuevo);
   fin = nuevo;
  }
 
 }
 
 //Metodo para imprimir los datos
 public void imprimir()
 {
  Nodo aux=inicio; 
  while(aux!=null)
  {
   System.out.println(aux.getDato());
   aux = aux.getSiguiente();
  } 
 }
 
 //Metodo apra eliminar los valores que superen un valor dado
 public void eliminar(int valor)
 {
  Nodo anterior=inicio;
  Nodo aux= inicio.getSiguiente();
  Nodo temp;
  while(aux!=null)
  {
   //Condicional simple para eliminacion de nodos
   if(aux.getDato() > valor)
   {
    temp=aux.getSiguiente();   
    anterior.setSiguiente(aux.getSiguiente()); 
    aux = temp;   
   }
   else
   {
    anterior=anterior.getSiguiente();
    aux=aux.getSiguiente();
   } 
  }
 }
}


Clase Principal:



import java.util.Scanner;

public class Principal 
{
 
 public static int leerEntero(String linea)
 {
  Scanner leer = new Scanner(System.in);
  System.out.println(linea);
  int dato = leer.nextInt();
  return dato; 
 }

 public static void main(String[] args) 
 {
  Lista coleccion = new Lista();
  int opcion;
  System.out.println("EJERCICIO 3 - LISTAS SIMPLES ENLAZADAS\n");
  do{
   System.out.println("MENU PRINCIPAL:");
   System.out.println("1.- Ingresar datos a la lista");
   System.out.println("2.- Imprimir Lista");
   System.out.println("3.- Eliminar datos que se pasan de un limite.");
   System.out.println("4.- Salir");
   opcion = leerEntero("Seleccione una opción:");
   
   switch(opcion)
   {
   case 1:
   {
    int nuevo = leerEntero("Ingrese el elemento que desee ingresar a la lista:");
    coleccion.agregarFin(nuevo);
    break;
   }
   case 2:
   {
    System.out.println("La lista ingresada es:");
    coleccion.imprimir();
    break;
   }
   case 3:
   {
    int valor = leerEntero("Ingrese el valor que sirva de limite:");
    coleccion.eliminar(valor);
    break;
   }
   case 4:
   {
    System.out.println("FIN DEL PROGRAMA");
    break;
   }
   }
  }while(opcion!=4);
 }
} 

Capturas de pantalla del programa:


10 comentarios:

  1. Y como se le hace para que en lugar de numeros sean nombres

    ResponderEliminar
    Respuestas
    1. Pues tenes q cambiar las variables lo mas y podras poner letras

      Eliminar
  2. lo ejecuto y sale Anagrama que es eso?
    soy nuevo en esto de programar

    ResponderEliminar
  3. Si el numero establecido como limite es inferior al numero raiz (el primer elemento de la lista), este ultimo no es eliminado. No esta recorriendo toda la lista sino a partir del segundo elemento.

    ResponderEliminar
  4. MUY BUEN EJEMPLO ME SIRVIÓ DE MUCCHO

    ResponderEliminar
  5. y si al imprimir en pantalla quisiera mostrar los datos inversos(ejemplo si pongo 1-2-3-4-5 salga 5-4-3-2-1? cómo haría?

    ResponderEliminar
  6. Disculpen ... buen dia .. y me podrían explicar como realizo el código con listas enlazadas.. si me piden
    que debe tener un nombre, id, carrera, instituto y 3 notas ... Por favor ¡¡¡

    ResponderEliminar
  7. Puedes pasar el codigo completo ??

    ResponderEliminar
  8. como identifico cual es el ciclo que se utilizo? alguien podria decirme

    ResponderEliminar