Curso de Java: Ejercicio EnumMap (solución) y árboles de datos

Continuamos otro lunes más con el curso de Java de RedesZone.net. Hemos actualizado el índice de entregas del curso, por lo que disponéis ya de todas ellas hasta el día de hoy.

Hoy vamos a daros la solución al ejercicio que os propusimos en la entrega anterior y comenzaremos con la introducción de la nueva estructura de datos que vamos a tratar, los árboles de datos.

Pero antes de nada vamos a recordar el enunciado del ejercicio que os propusimos y vamos a daros una posible solución.

Disponemos de un taller de reparación de coches y queremos organizar las citas para cada una de las semanas del mes. Durante cada día se podrán dar varias citas que serán atendidas en el orden de haberse registrado.

Indicaciones:

  • La clave serán los días de la semana.
  • El valor sera una linkedlist, que contendrá objetos de la clase Cita.
  • La implementación de la clase Cita se deja a la elección de cada usuario.

Métodos a implementar:

  • Añade una cita a una día determinado
  • Borra una cita
  • Mostrar por pantalla todas las citas que contiene el mapa

Ahora vamos a daros una posibles solución. La nuestra va a constar de 4 clases:

  • La clase enumerada
  • La clase Cita
  • La clase Taller
  • La clase de Prueba

Ahora vamos a poneros el código de cada una de las clases:

Clase DiaSemana


/**Clase enumerada privada*/
 public enum DiaSemana

 {

 lunes, martes, miercoles, jueves, viernes, sabado, domingo

 }

– Clase Cita

public class Cita
{
 private String matricula;
 private String marca;
 private String modelo;

 public Cita(String m, String mar, String mod)
 {
 matricula=m;
 marca=mar;
 modelo=mod;

 }

 public String matricula()
 {
 return matricula;
 }

 public String toString()
 {
 return "Matricula: "+matricula+"tMarca: "+marca+"tModelo: "+modelo+"n";
 }

}

Clase Taller


import java.util.*;
import java.util.Map.Entry;

public class Taller
{

 /**Mapa enumerado*/
 private EnumMap<DiaSemana,LinkedList<Cita>> citasTaller;

 public Taller()

 {

 citasTaller=new EnumMap<DiaSemana,LinkedList<Cita>>(DiaSemana.class);

 for(DiaSemana d : DiaSemana.values())
 {
 citasTaller.put(d, new LinkedList<Cita>());
 }

 }

 /**Añade una cita a un día de la semana*/
 public void anadeCita(DiaSemana dia, Cita cita)

 {
 LinkedList<Cita>aux=citasTaller.get(dia);
 aux.add(cita);

 }

 /**Borra la cita elegida*/
 public boolean borraCita(String matricula)
 {

 LinkedList<Cita> aux;
 boolean borrado=false;

 for(DiaSemana d : DiaSemana.values())
 {
 aux=citasTaller.get(d);

 for(int i=0; i<aux.size(); i++)
 {
 if(aux.get(i).matricula().equals(matricula))
 {
 aux.remove(i);
 borrado=true;
 }
 }

 }

 return borrado;

 }

 /**Muestra todas las citas contenidas*/
 public void muestraCitas()
 {

 LinkedList<Cita> aux;

 for(DiaSemana d : DiaSemana.values())
 {
 aux=citasTaller.get(d);

 System.out.println(d);

 for(int i=0; i<aux.size(); i++)
 {
 System.out.println(aux.get(i).toString());

 }

 }

}

}

Clase Prueba

public class PruebaTaller
{
 public static void main(String[]args)
 {
 Taller t=new Taller();

 Cita c1= new Cita("9898", "Seat", "Ibiza");
 Cita c2= new Cita("0000", "Seat", "Leon");
 Cita c3= new Cita("1111", "Seat", "Toledo");
 Cita c4= new Cita("2222", "Seat", "Alhambra");
 Cita c5= new Cita("3333", "Seat", "Exeo");
 Cita c6= new Cita("4444", "Seat", "Leon");
 Cita c7= new Cita("5555", "Seat", "Ibiza");

 t.anadeCita(DiaSemana.lunes, c1);
 t.anadeCita(DiaSemana.martes, c2);
 t.anadeCita(DiaSemana.lunes, c3);
 t.anadeCita(DiaSemana.lunes, c4);
 t.anadeCita(DiaSemana.lunes, c5);
 t.anadeCita(DiaSemana.lunes, c6);
 t.anadeCita(DiaSemana.lunes, c7);

 t.muestraCitas();

 t.borraCita("1111");

 t.muestraCitas();
 }

}

Ahora vamos a comenzar la introducción a los árboles de datos en Java.

Un árbol es una estructura de datos jerarquizada. Cada dato reside en un nudo, y existen relaciones de parentesco entre nudos:

Los árboles constituyen estructuras de datos jerarquizados, y tienen multitud de aplicaciones, como por ejemplo:

  • Análisis de circuitos, Representación de estructuras de fórmulas matemáticas
  • Organización de datos en bases de datos
  • Representación de la estructura sintáctica en compiladores.
  • En muchas otras áreas de las ciencias del computador.

Un árbol está constituido por una colección de elementos denominados nudos, uno de los cuales se distingue con el nombre raíz, junto con una relación de ‘parentesco’ que establece una estructura jerárquica sobre los nudos. Cada nudo tiene un padre (excepto el raíz) y puede tener cero o más hijos. Se denomina hoja a un nudo sin hijos.

Ahora para acabar, os dejamos algunas definiciones teóricas que necesitaremos para la siguiente entrega:

  • Camino: secuencia de nudos tales que cada uno es hijo del anterior
  • Longitud del camino: nº de nudos que tiene
  • Antecesor: un nudo es antecesor de otro si hay un camino del primero al segundo
  • Descendiente: un nudo es descendiente de otro si hay un camino del segundo al primero
  • Subárbol o Rama: Un nudo y todos sus descendientes

En la siguiente entrega continuaremos hablando de los árboles, más concretamente, de cómo pueden recorrerse y ordenarse y os pondremos algún ejemplo

Compártelo. ¡Gracias!

1 Comentario
RedesZone © 2010 - 2014