miércoles, 18 de noviembre de 2015

Ejercicio 1 - Listas Simples

Enunciado:


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 realizar este ejercicio es necesario recordar la definición de listas simples, las cuales tienen como principal característica que solo se puede avanzar, no se puede retroceder. Dicho esto se procedió a realizar un ordenamiento burbuja para que los elementos se comparen y se ordenen de mayor a menor. Para realizar un ordenamiento burbuja se debe utilizar sentencias for anidadas.

A continuación se muestra el código:

Clase Nodo:

public class Nodo 
{

 //Declaración de atributos
 private int dato;
 private Nodo siguiente;
 
 //Constructor Nodo null
 public Nodo(int dato)
 {
  this.dato=dato;
  this.siguiente=null;
 }
 //Constructor Nodo con parametro
 public Nodo(int dato, Nodo siguiente)
 {
  this.dato=dato;
  this.siguiente=siguiente;
 }

 //Metodos getters and setters
 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 
{

 private Nodo inicio;
 private Nodo fin;
 
 public Lista()
 {
  inicio=fin=null;
 }
 
 //Metodo para agregar inicio
 public void agregarInicio(int info)
 {
  Nodo nuevo=new Nodo(info, inicio);
  if(inicio==null)
  {
   inicio=fin=nuevo;
  }
  inicio=nuevo;
 }
 
 //Metodo para agregar fin
 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
 public void imprimir()
 {
  Nodo aux=inicio;
  while(aux!=null)
  {
   System.out.println(aux.getDato());
   aux=aux.getSiguiente();
  }
 }
 
 //Metodo para eliminar el nodo
 public void eliminarNodo(int numero)
 {
  if(inicio!=null)
  {
   if((inicio==fin)&&(inicio.getDato()==numero))
   {
    inicio=fin=null;
   }
   else if(inicio.getDato()==numero)
   {
    inicio=inicio.getSiguiente();
   }
   else
   {
    Nodo anterior=inicio;
    Nodo siguiente=inicio.getSiguiente();
    while((siguiente!=null)&&(siguiente.getDato()!=numero))
    {
     anterior=siguiente;
     siguiente=siguiente.getSiguiente();
    }
    if(siguiente!=null)
    {
     anterior.setSiguiente(siguiente.getSiguiente());
     if(siguiente==fin)
     {
      fin=anterior;
     }
    }
   }
  }
 }
 
 //Metodo ordenar de mayor a menor
 public void ordenarMayorMenor(int info)
 {
  int aux;
  Nodo recorrer=inicio;
  int array[]=new int [info];
  for(int i=0;i<info;i++)               
{
   array[i]=recorrer.getDato();
   recorrer=recorrer.getSiguiente();
  }
  for(int k=0;k<info;k++)
  {
   for(int j=k+1;j<info;j++)
   {
    if(array[k]<array[j])
    {
     aux=array[k];
     array[k]=array[j];
     array[j]=aux;
    }
   }
  }
  Lista nueva=new Lista();
  for(int f=0;f<info;f++)
  {
   nueva.agregarFin(array[f]);
  }
  nueva.imprimir();
 }
 
 //Metodo para calcular el promedio de la lista
 public void promedio()
 {
  Nodo aux=inicio;
  int suma=0;
  double promedio;
  while(aux!=null)
  {
   suma= suma+ aux.getDato();
   aux=aux.getSiguiente();
  }
  promedio=suma/5;
  System.out.println("El promedio de la lista es:"+promedio);
 }
 
//Metodo para obtener el numero que más se repite y su frecuencia de repeticion
 public void repeticiones(int inf)
 {
  int frecTemp, frecModa=0, moda=-1;
  Nodo recorrer=inicio;
  int array[]=new int [inf];
  for(int i=0;i<inf;i++)
  {
  array[i]=recorrer.getDato();
  recorrer=recorrer.getSiguiente();
  }
  for(int i=0;i<array.length-1;i++)
  {
   frecTemp=1;
   for(int j=i+1;j<array.length;j++)
   {
    if(array[i]==array[j])
     frecTemp++;
   }
   if(frecTemp>frecModa)
   {
    frecModa=frecTemp;
    moda=array[i];
   }
  }
  System.out.println("El elemento más repetido en la lista es: "+moda+", con una frecuencia de: "+frecModa);
 }
}

Clase Principal:




import java.util.Scanner;

public class Principal 
{

 public static void main(String[] args) 
 {
 Scanner lectura=new Scanner(System.in);
 Lista coleccion=new Lista();
 int n=5, dato;
 System.out.println("Ejercicio 1- Listas Simples\n");
 for(int i=0;i<n;i++)
 {
  System.out.println("Ingrese el elemento "+(i+1)+" de la lista");
  dato=lectura.nextInt();
  coleccion.agregarInicio(dato);
 }
 System.out.println("Lista ingresada:");
 coleccion.imprimir();
 
 System.out.println("\nLista ordenada de mayor a menor");
 coleccion.ordenarMayorMenor(n);
 
 coleccion.promedio();
        coleccion.repeticiones(n);
 }
}

Capturas de Pantalla:




1 comentario: