Rotación en una cola

Disponemos de una clase Queue (fichero queue.hh) que implementa una cola de valores de tipo T. Se trata de añadir un método rotate a la clase Queue, que recibe un valor vv, y tiene el siguiente comportamiento.

Por ejemplo, si la cola es x y z a b c d, y vv es a, entonces la cola se convierte en a b c d x y z. La cabecera del método a implementar es:

/**
 * @pre:  Cierto.
 *
 * @post: Si la cola (p. i.) no contiene el valor value, ésta no cambia. 
 *        Si la cola lo contiene, se tomará como referencia la primera 
 *        aparición, y se moverán todos los elementos anteriores a ésta al
 *        final de la cola, en el mismo orden en que estaban.
 */
void rotate(T value);

(El método rotate se encuentra al final del fichero queue.hh.)

Los ficheros públicos (icono del gatito) incluyen un .tar con main.cc, queue.hh y un Makefile. También se incluye una copia de los juegos de prueba públicos por comodidad. En la carpeta donde se descompriman se puede: compilar con "make"; y testear con "make test".

El main.cc ya se encarga de leer la entrada, procesar los comandos y producir la salida. Para entregar, solo es necesario subir al Jutge vuestro archivo queue.hh modificado.

Entrada

La entrada del programa es una secuencia de comandos como los siguientes que se irán aplicando sobre una cola de strings que está inicialmente vacía:

push x     // lee un string y lo pone en la cola
pop
front
size
rotate     // lee un string y rota la cola
print      // muestra la cola a la salida

Se puede suponer que la secuencia de entrada será correcta (p.e., sin comandos pop ni front cuando la cola está vacía).

Salida

La salida es el resultado de los comandos size, front o print. Consultad los juegos de prueba, ya que son auto-explicativos.

Observación

La eficiencia del algoritmo es importante.

Información del problema

Autoría: PRO2

Generación: 2026-01-27T18:48:16.747Z

© Jutge.org, 2006–2026.
https://jutge.org