miércoles, 18 de noviembre de 2015

Ejercicio Utilizando Listas Simples

1.    Crear una lista simple la cual debe ingresar números reales, luego ordenarlos de mayor a menor, imprimir la lista, obtener el promedio de los valores de cada lista, comprobar cuál es el valor que más se repite en la lista. 

Para este ejercicio es fundamental conocer que cuando se trabaja con listas simples, no es posible recorrer en ambos sentidos (atrás-delante), simplemente en una sola dirección. Por lo que en el ejercicio se usó un método para almacenar los datos en un arreglo y de esta manera organizarlos mediante el método que más nos agrade, en este caso el ordenamiento burbuja.

A continuación el código fuente:
Main:

import java.util.Scanner;

public class Main
{

 public static void main(String[] args) 
 {
  Lista arreglo = new Lista();
  Scanner leer = new Scanner(System.in);
  
  System.out.println("\t\t\tBienvenido al Programa Listas\n");
  
  int numero=5,dato;
  

  for (int i = 0; i < numero; i++) 
  {
   System.out.println("\nIngrese el dato de el nodo "+(i+1));
   dato=leer.nextInt();
   
   arreglo.agregarInicio(dato);
   
  }
  
  System.out.println("Lista Ingresada: ");
  arreglo.imprimir();

  System.out.println("Lista Ingresada ordenada Mayor Menor ");
  arreglo.ordenarMayorMenor(numero);
  
  System.out.println();
  arreglo.sacarPromedio();
  
  System.out.println();
  arreglo.sacarMayorRepeticiones(numero);

 }

}


Lista

public class Lista 
{
 private Nodo inicio;
 private Nodo fin;
 
 public Lista()
 {
  inicio=fin=null;
 }
 
 public void agregarInicio(int info)
 {
  Nodo nuevo = new Nodo(info,inicio);
  
  if(inicio==null)
  {
   inicio=fin=nuevo;
  }
  
  inicio=nuevo;
  
 }
 
 public void agregarFin(int info)
 {
  Nodo nuevo=new Nodo(info, null);
  
  if (inicio==null)
  {
   inicio=fin=nuevo;
  }
  
  else
  {
   fin.setSiguiente(nuevo);
   fin=nuevo;
   
  }
 }
 
 public void imprimir()
 {
  Nodo aux=inicio;
  while(aux!=null)
  {
   System.out.println(aux.getDato());
   aux=aux.getSiguiente();
  }
 }
 
 public void eliminarNodo(int info)
 {
  if(inicio!=null)
  {
   if(inicio==fin&&inicio.getDato()==info)
   {
    inicio=fin=null;
   }
   else
   {
    if(inicio.getDato()==info)
    {
     inicio=inicio.getSiguiente();
    }
    else
    {
     Nodo anterior=inicio;
     Nodo siguiente=inicio.getSiguiente();
     
     while(siguiente!=null&&siguiente.getDato()!=info)
     {
      anterior=siguiente;
      siguiente=siguiente.getSiguiente();
     }
     
     if(siguiente!=null)
     {
      anterior.setSiguiente(siguiente.getSiguiente());
      if(siguiente==fin)
      {
       fin=anterior;
      }
     }
    }
   }
  }
 }
 
 public void ordenarMayorMenor(int d)
 {
  int aux;
  Nodo recorre1=inicio;
  int datos[]=new int [d];
  
  for(int i=0;i<d;i++)
  {
   datos[i]=recorre1.getDato();
   recorre1=recorre1.getSiguiente();
   
  }
  
  for(int k=0;k<d-1;k++)
  {
   for(int j=k+1;j<d;j++)
   {
    if(datos[k]<datos[j])
    {
     aux=datos[k];
     datos[k]=datos[j];
     datos[j]=aux;     
    }
    
   }
  }  
  Lista nueva =new Lista();
  
  for(int f=0;f<d;f++)
  {
   nueva.agregarFin(datos[f]);
  }
   nueva.imprimir();
  
 }
 
 public void sacarPromedio()
 {
  Nodo aux=inicio;
  double promedio=0, promFinal=0;
  int cont=0;
  while(aux!=null)
  {
   promedio=promedio+aux.getDato();
   aux=aux.getSiguiente();
   cont++;
  }
  
  promFinal=promedio/cont;
  System.out.println("El Promedio de los numeros igresados es: "+promFinal);
 }
 
 public void sacarMayorRepeticiones(int d)
 {
  int frecuenciaTemp, frecuenciaModa = 0, moda = -1;;
  Nodo recorre1=inicio;
  int datos[]=new int [d];
  
  for(int i=0;i<d;i++)
  {
   datos[i]=recorre1.getDato();
   recorre1=recorre1.getSiguiente();
   
  }
    
   for (int i=0; i < datos.length-1; i++)
   {
             frecuenciaTemp = 1;
             for(int j = i+1 ; j< datos.length; j++)
             {
                 if(datos[i] == datos[j])
                     frecuenciaTemp ++;                
             }
             if(frecuenciaTemp > frecuenciaModa)
             {
                 frecuenciaModa = frecuenciaTemp;
                 moda = datos[i];
             }
         }
         System.out.println("El elemento que mas se repite es: " + moda + "\nY su frecuencia: " + frecuenciaModa);        
 
 }
  
}

Nodo:

public class Nodo 
{
 private int dato;
 private Nodo siguiente;
 public Nodo(int dato, Nodo siguiente) 
 { 
  this.dato = dato;
  this.siguiente = siguiente;
 }
 
 public Nodo(int dato)
 {
  this.dato = dato;
  this.siguiente = null;
  
 }
 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;
 }

}



Ejecución en consola

                                           

No hay comentarios:

Publicar un comentario