Mueve al principio en una lista V39031


Statement
 

pdf   zip   tar

thehtml

Implementad un nuevo método de la clase List para mover el contenido apuntado por un iterador al inicio de la lista. En caso de que el iterador ya apunte al primer elemento de la lista, entonces el método no hará nada. Entre los archivos que se adjuntan en este ejercicio, encontraréis list.hh, donde hay una implementación de la clase genérica List.

/**
 * @pre  'it' apunta a algún elemento de la lista implícita no vacía.
 *
 * @post 'it' continúa apuntando al mismo elemento, el cual ha sido movido 
 *       al inicio de la llista. No se ha reservado ni liberado memoria. 
 *       En el caso en que el elemento apuntado por 'it' ya fuese el 
 *       primero, nada ha cambiado.
 */
void moveToBeginning(iterator &it)

(Encontraréis la declaración de moveToBeginning al final del fichero list.hh, que es bastante largo.)

No toquéis el resto de la implementación de la clase List, excepto si, por algún motivo, consideráis que necesitáis añadir algún método auxiliar a la parte privada. Entre los archivos que se adjuntan al ejercicio (icono del gatito) está el programa principal, main.cc, que podéis compilar.

Los ficheros públicos (icono del gatito) incluyen un .tar con main.cc, list.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 hay que subir al Juez vuestro fichero list.hh modificado.

Entrada

La entrada del programa es una secuencia de instrucciones del siguiente tipo que se irán aplicando sobre una lista que inicialmente está vacía y un iterador que está situado inicialmente al principio (y final) de esta lista:

push_front s     // s es un string
push_back s      // s es un string
pop_front
pop_back
it++
it--
*it
moveToBeginning  // el método que debéis implementar
print_list       // muestra la lista entera en la salida

Se puede suponer que la secuencia de entrada será correcta (es decir: sin pop_front ni pop_back sobre lista vacía, ni *it ni moveToBeginning teniendo it situado en el end de la lista; tampoco habrá pop_front justo cuando el iterador esté apuntando al primer elemento de la lista, ni habrá pop_back justo cuando el iterador esté apuntando al último elemento de la lista; tened en cuenta que el último elemento de la lista no es el end de la lista).

El programa principal que os ofrecemos ya se encarga de leer estas entradas y hacer las llamadas a los correspondientes métodos de la clase List. Solo tenéis que implementar el método antes mencionado.

Salida

El programa principal ya se encarga de producir la salida: para cada instrucción *it, escribe el contenido apuntado por el iterador; y para cada instrucción print_list se muestra el contenido de toda la lista.

Public test cases
  • Input

    push_back a
    it--
    *it
    print_list
    moveToBeginning
    print_list
    push_back b
    it++
    *it
    print_list
    moveToBeginning
    print_list
    push_front c
    it++
    *it
    print_list
    moveToBeginning
    print_list

    Output

    a
    a
    a
    b
    a b
    b a
    a
    c b a
    a c b
    
  • Information
    Author
    PRO2
    Language
    Spanish
    Translator
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    Unknown.
    User solutions
    C++