You are on page 1of 4

TEMA 4 Conceptos de Java para Estructuras de Datos Representacin enlazada

EJERCICIOS RESUELTOS

Ejercicio 1.- Aadir a la clase LEG un mtodo que inserte un nuevo elemento al final de la lista:
public void insertarEnFin(E x);

Cul es el coste del nuevo mtodo? Solucin:


public void insertarEnFin(E x) { NodoLEG<E> aux = primero; if (aux == null) // Lista vaca primero = new NodoLEG<E>(x); else { while (aux.siguiente != null) aux = aux.siguiente; aux.siguiente = new NodoLEG<E>(x); } talla++; }

El coste del mtodo es lineal respecto del nmero de elementos de la lista.

Ejercicio 2.- Escribir el mtodo eliminar de la LEGCircular. Solucin:


public boolean eliminar(E x) { if (ultimo == null) return false; NodoLEG<E> aux = ultimo.siguiente, ant = ultimo; while (aux != ultimo && !aux.dato.equals(x)) { ant = aux; aux = aux.siguiente; } if (!aux.dato.equals(x)) return false; if (aux == ant) ultimo = null; else { ant.siguiente = aux.siguiente; if (ultimo == aux) ultimo = ant; } talla--; return true; }

Ejercicio 3.- Escribir un mtodo toString() de LDEG que obtenga una representacin textual de los nodos de la lista en orden descendente, del ltimo al primero.

Solucin:
public String toStringDesc() { NodoLDEG<E> aux = primero; String res = ; if (aux != null) { // Lista no vaca while (aux.siguiente != null) aux = aux.siguiente; while (aux != null) { res += aux.dato.toString() + \n; aux = aux.anterior; } } return res; }

Solucin alternativa:
public String toStringDesc() { String res = ; for (NodoLDEG <E> aux = primero; aux != null; aux = aux.siguiente) res = aux.dato.toString() + \n + res; return res; }

Ejercicio 4.- Disea el mtodo insertarEnFin(E x) de la clase LDEG.

Solucin:
public void insertarEnFin(E x) { NodoLDEG<E> aux = primero; if (aux == null) primero = new NodoLDEG<E>(x); else { while (aux.siguiente != null) aux = aux.siguiente; aux.siguiente = new NodoLDEG<E>(x, null, aux); } talla++; }

Ejercicio 5.- Es conveniente que LEGOrdenada sobrescriba el mtodo eliminar de LEG? En caso afirmativo, indquese por qu y realcense las modificaciones oportunas.

Solucin: S que debe sobrescribirlo, pues podemos mejorar la eficiencia cuando el elemento que vamos a eliminar, x, no se encuentra en la lista: cuando encontremos un elemento en la lista que sea mayor que x, no har falta continuar recorriendo la lista ya que todos los elementos siguientes tambin sern mayores que x.
public boolean eliminar(E x) { NodoLEG<E> aux = primero, ant = null; int res = -1; while (aux != null && res < 0) { res = aux.dato.compareTo(x); if (res < 0) { ant = aux; aux = aux.siguiente; } } if (aux == null || res > 0) return false; if (ant == null) primero = aux.siguiente; else ant.siguiente = aux.siguiente; talla--; return true; }

Ejercicio 6.- Disea el mtodo eliminarMayor(E x), que borra de la lista todos los elementos mayores que x, en las clases LEG y LEGOrdenada.

Solucin (para la clase LEG):


public class LEGDeComparables<E extends Comparable<E>> extends LEG<E> { public void eliminarMayor(E x) { NodoLEG<E> aux = primero, ant = null; while (aux != null) { int res = aux.dato.compareTo(x); if (res > 0) { // Borrar if (ant == null) primero = aux.siguiente; else ant.siguiente = aux.siguiente; talla--; } else ant = aux; aux = aux.siguiente; } } }

Solucin (para la clase LEGOrdenada):


public void eliminarMayor(E x) { NodoLEG<E> aux = primero, ant = null; talla = 0; while (aux != null) { int res = aux.dato.compareTo(x); if (res > 0) { // Borrar los nodos que quedan a continuacin if (ant == null) primero = null; else ant.siguiente = null; aux = null; } else { ant = aux; aux = aux.siguiente; talla++; } } }

Ejercicio 7.- Escribe el mtodo E buscarMin() en la clase LEGCircular, que devuelve el menor elemento de la lista. Solucin:
public class LEGCircularDeComparables<E extends Comparable<E>> extends LEGCircular <E> { public E buscarMin() { if (ultimo == null) return null; NodoLEG<E> aux = ultimo; E min = aux.dato; do { aux = aux.siguiente; if (aux.dato.compareTo(min) < 0) min = aux.dato; } while (aux != ultimo); return min; } }

Ejercicio 8.- Escribe el mtodo E recuperar(int indice) en la clase LEG, que devuelve el elemento de la lista que ocupa dicha posicin. El mtodo deber lanzar la excepcin ElementoNoEncontrado si el ndice est fuera de rango. Solucin:
public E recuperar(int indice) throws ElementoNoEncontrado { if (indice < 0 || indice >= talla) throw new ElementoNoEncontrado(Indice +indice+ fuera de rango); NodoLEG<E> aux = primero; for (int i = 0; i < indice; i++) aux = aux.siguiente; return aux.dato; }

You might also like