Listas ordenadas Implementación Estructuras de Datos y de la Información ESI – Curso 2010/2011 Esquema general _primero 12 _resto 3 5 -7 Estructuras de Datos y de la Información 17 ESI – Curso 2010/2011 Esquema general _primero 12 _resto 3 _primero -7 5 -7 17 _resto 3 Estructuras de Datos y de la Información 5 12 17 ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public ListaOrdenada () { super(); } public ListaOrdenada (E e) { this(e, new ListaOrdenada<E>()); } public ListaOrdenada (E e, ListaOrdenada<E> l) { super(e, l); eliminarPrimero(); insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public ListaOrdenada () { super(); } public ListaOrdenada (E e) { this(e, new ListaOrdenada<E>()); } public ListaOrdenada (E e, ListaOrdenada<E> l) { super(e, l); eliminarPrimero(); // Para ordenar el primero. insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void insertar (E e) throws NullPointerException { if (e == null) throw new NullPointerException(); } insertarOrdenado(e); Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public void insertarOrdenado (E e) throws NullPointerException { if (e == null) throw new NullPointerException(); if (esVacia()) { _primero = e; _resto = new ListaOrdenada<E>(); } else if (_primero.compareTo(e) > 0) { _resto = new ListaOrdenada<E>(_primero, (ListaOrdenada<E>)_resto); _primero = e; } else this.resto().insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public void insertarOrdenado (E e) throws NullPointerException { if (e == null) throw new NullPointerException(); if (esVacia()) { _primero = e; _resto = new ListaOrdenada<E>(); } else if (_primero.compareTo(e) > 0) { _resto = new ListaOrdenada<E>(_primero, (ListaOrdenada<E>)_resto); _primero = e; } else this.resto().insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public void insertarOrdenado (E e) throws NullPointerException { if (e == null) throw new NullPointerException(); if (esVacia()) { Caso base _primero = e; e < _primero _resto = new ListaOrdenada<E>(); } else if (_primero.compareTo(e) > 0) { _resto = new ListaOrdenada<E>(_primero, (ListaOrdenada<E>)_resto); _primero = e; } else this.resto().insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { public void insertarOrdenado (E e) throws NullPointerException { if (e == null) throw new NullPointerException(); if (esVacia()) { _primero = e; Caso recursivo _resto = new ListaOrdenada<E>(); } else if (_primero.compareTo(e) > 0) { _resto = new ListaOrdenada<E>(_primero, (ListaOrdenada<E>)_resto); _primero = e; } else this.resto().insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void insertarN (int pos, E e) throws IndiceFueraDeRangoException, NullPointerException { if ((pos <= 0) || (pos - 1 > tamanyo())) throw new IndiceFueraDeRangoException(); else insertarOrdenado(e); } @Override public void insertarFinal (E e) throws NullPointerException { insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void insertarN (int pos, E e) throws IndiceFueraDeRangoException, NullPointerException { if ((pos <= 0) || (pos - 1 > tamanyo())) throw new IndiceFueraDeRangoException(); else insertarOrdenado(e); } @Override public void insertarFinal (E e) throws NullPointerException { insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void modificarN (int pos, E e) throws IndiceFueraDeRangoException, NullPointerException { super.eliminarN(pos); insertarOrdenado(e); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public boolean pertenece (E e) { return (posicion(e) > 0); } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void concatenar (ListaRecursiva<E> lista) throws ListaVaciaException { if (!lista.esVacia()) { insertarOrdenado(lista.primero()); concatenar(lista._resto); } } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Implementación :: ListaOrdenada public class ListaOrdenada<E extends Comparable> extends ListaRecursiva<E> { @Override public void concatenar (ListaRecursiva<E> lista) throws ListaVaciaException { if (!lista.esVacia()) { insertarOrdenado(lista.primero()); concatenar(lista._resto); } } Estructuras de Datos y de la Información ESI – Curso 2010/2011 Problema :: Enunciado ● Una comunidad está compuesta de una serie de provincias, que a su vez están compuestas de un número de localidades. Cada localidad tiene un determinando número de habitantes empadronados en la misma. Estructuras de Datos y de la Información ESI – Curso 2010/2011 Problema :: Requisitos ● Usar las estructuras de datos adecuadas para: – Indicar las localidades de una provincia o comunidad, ordenadas alfabéticamente, que tienen más de n habitantes. – Listar, alfabéticamente, los habitantes cuya edad se encuentra dentro un determinado rango. – Generar un recuento de la población, por localidad, provincia y comunidad. – Detectar a aquellos habitantes que cambian de domicilio. Estructuras de Datos y de la Información ESI – Curso 2010/2011