Home UC3M Universidad Carlos III de Madrid - Departamento de Ingeniería Telemática Home IT
Localización | Personal | Docencia | Investigación | Novedades | Intranet  

Examen de prácticas - tipo A

Datos de la práctica

Fecha 5 de junio de 2007
Calificación máxima 2 puntos

Enlaces

Entrega tu solución.

Contenidos

Código de partida

En este ejercicio se trabajará con una implementación de una cola como lista enlazada muy similar a la realizada en la práctica correspondiente. Debes tomar como punto de partida el siguiente código (descarga los ficheros en tu directorio de trabajo):

A diferencia del código realizado en la práctica de colas, en este ejercicio la clase Nodo almacena tanto un dato (Object) como una clave asociada (Comparable). Salvo por este detalle, la cola funciona de forma similar a la desarrollada en la práctica.

Enunciado

Apartado 1 (0,5 puntos)

Programa el método concatenar de la clase Concatenar. Este método recibe una cola como parámetro, cuyos datos son cadenas de texto. Debe devolver una cadena de texto con la concatenación de todas las cadenas de la cola, sin ningún carácter de separación. Deben ser concatenadas en el mismo orden con que se extraen de la cola (la primera cadena a extraer será la primera en la cadena de texto concatenada).

public String concatenar(Cola cola) {

}

Puedes probar este apartado con ayuda del método main proporcionado con el esqueleto de la clase. La salida correcta debería ser:

Concatenación: 'Representación de datos'

Apartado 2 (0,75 puntos)

Programa el método insertarNoDuplicado de la clase ColaEnlazada. Este método recibe un dato con su clave asociada y debe introducirlo en la cola sólo si no existe ya otro dato con la misma clave en la misma.

public void insertarNoDuplicado(String dato, Comparable clave) {

}

Puedes probar este apartado con ayuda del método main proporcionado con el esqueleto de la clase. La salida correcta debería ser:

a
b
c
d
z
e

Apartado 3 (0,75 puntos)

Programa una nueva clase ColaConPrioridadEnlazada (para esta clase no se proporciona esqueleto), que herede de ColaEnlazada. En esta clase los datos se extraen de acuerdo a su prioridad, que viene dada por la ordenación de las claves. Cada vez que se extrae un dato, este debe ser el de clave menor de la cola. En caso de igualdad de claves, se extrae el dato que lleve más tiempo en la cola.

La única diferencia en la implementación de esta clase con respecto a ColaEnlazada está en el algoritmo de inserción de datos: en vez de insertar siempre en la última posición de la cola, se insertan los datos en la posición de la misma de acuerdo a la clave del dato a insertar (claves menores hacia el principio de la lista enlazada, y claves mayores hacia el final). De esta forma, la lista estará siempre ordenada, y la operación de extracción consistirá sólo en extraer siempre el primer elemento de la lista.

Puedes probar este método con ayuda del siguiente método main (inclúyelo en tu clase ColaConPrioridadEnlazada):

public static void main(String args[]) {
    ColaConPrioridadEnlazada cola = new ColaConPrioridadEnlazada();
       
    cola.insertar("t", "cl-t");
    cola.insertar("a", "cl-a");
    cola.insertar("m", "cl-m");
    cola.insertar("b", "cl-b");
    cola.insertar("0.1", "cl-0");
    cola.insertar("0.2", "cl-0");
    cola.insertar("0.3", "cl-0");
    cola.insertar("z", "cl-z");
    cola.insertar("primero", "a-primero");
        
    Object o;
    while ((o=cola.retirar()) != null) {
        System.out.println(o);
    }
}

La salida de este método debería ser:

primero
0.1
0.2
0.3
a
b
m
t
z

Soluciones