Disposem d’una classe Queue (fitxer
queue.hh) que implementa una cua de valors de tipus
T. Es tracta d’afegir un mètode
rotate a la classe Queue, que
rep un valor
,
i té el següent comportament.
Si no es troba a la cua, aquesta no canvia.
Si apareix a la cua, l’element de valor passa a ser el primer de la cua, posant tots els anteriors a aquest al final de la cua, en el mateix ordre en què estaven. (Si la cua conté diversos elements de valor , es pren el primer.)
Per exemple, si la cua és x y z a b c d, i
és a, llavors la cua es converteix en
a b c d x y z. La capçalera del mètode a implementar
és:
/**
* @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ètode rotate es troba al final del fitxer
queue.hh.)
Els fitxers públics (icona del gatet) inclouen un .tar
amb main.cc, queue.hh i un
Makefile. També s’inclou una còpia dels jocs de prova
públics per comoditat. A la carpeta on es descomprimeixin es pot:
compilar amb "make"; i testar amb
"make test".
El main.cc ja s’encarrega de llegir l’entrada, processar
les comandes i produir la sortida. Per entregar, només cal pujar al
Jutge el vostre fitxer queue.hh modificat.
L’entrada del programa és una seqüència de comandes com les següents
que s’aniran aplicant sobre una cua de strings que està
inicialment buida:
push x // llegeix un string i el posa a la cua
pop
front
size
rotate x // llegeix un string i rota la cua
print // mostra la cua a la sortida
Es pot suposar que la seqüència d’entrada serà correcta (p. e., sense
comandes pop ni front quan la cua està
buida).
La sortida és el resultat de les comandes size,
front o print. Consulteu els jocs de prova, ja
que són auto-explicatius.
L’eficiència de l’algorisme és important.
Input
push x rotate a size push a print rotate a print
Output
1 2 x a 2 a x
Input
push a push b push c rotate b print push d print pop rotate d print push c print rotate c print
Output
3 b c a 4 b c a d 3 d c a 4 d c a c 4 c a c d