Mètode de Stack per a esborrar el primer element igual al paràmetre X74809


Statement
 

pdf   zip   tar

html

Implementeu un nou mètode de la classe Stack que rebi un element com a paràmetre i esborri la primera ocurrència (primera des del cim) d’aquest element, si existeix.

D’entre els fitxers que s’adjunten en aquest exercici, trobareu stack.old.hh, a on hi ha una implementació de la classe genèrica Stack. En primer lloc, haureu de fer:

cp stack.old.hh stack.hh

A continuació, haureu de buscar dins stack.hh la part:

// Pre:
// Post: La primera ocurrència de 'value' en la pila implícita ha estat esborrada.
//       Si no hi havia cap ocurrència de 'value', llavors no ha canviat res.
// Descomenteu les següents dues linies i implementeu la funció:
// void removeFirstOccurrence(T value) {
// }

Haureu de descomentar les dues línies que s’indiquen i implementar aquest mètode. No toqueu la resta de la implementació de la classe, excepte si, per algun motiu, considereu que necessiteu afegir algun mètode auxiliar a la part privada.

Preferiblement, haurieu d’aconseguir implementar removeFirstOccurrence a base d’avançar pels punters de l’objecte. De fet, una implementació a base d’usar push i pop us permetrà passar els jocs de proves públics (i així obtenir una part de la nota), però no els privats. Recordeu que és important alliberar la memòria que ja no s’utilitzarà més.

D’entre els fitxers que s’adjunten a l’exercici també hi ha program.cc (programa principal) i Makefile per a compilar. Per a pujar la vostra solució, heu de crear el fitxer solution.tar així:

tar cf solution.tar stack.hh

Entrada

La entrada del programa és una seqüència d’instruccions del següent tipus que s’aniran aplicant sobre una pila que se suposa inicialment buida:

push x (x és un string)
pop
top
size
removeFirstOccurrence x (x és un string)

Se suposa que la seqüència d’entrada serà correcta (sense pop ni top sobre pila buida).

El programa principal que us oferim ja s’encarrega de llegir aquestes entrades i fer les crides als corresponents mètodes de la classe pila. Només cal que implementeu el mètode abans esmentat.

Sortida

Per a cada instrucció top, s’escriurà el top actual de la pila. Per a cada instrucció size, s’escriurà la mida de la pila. El programa que us oferim ja fa això. Només cal que implementeu el mètode abans esmentat.

Observació

Avaluació sobre 10 punts:

  • Solució lenta: 6 punts.
  • solució ràpida: 10 punts.
Public test cases
  • Input

    removeFirstOccurrence e
    removeFirstOccurrence a
    push a
    top
    removeFirstOccurrence a
    push b
    size
    top
    removeFirstOccurrence c
    top
    push d
    push f
    size
    removeFirstOccurrence d
    top 
    push f
    top
    removeFirstOccurrence f
    size
    top 
    removeFirstOccurrence a
    top
    removeFirstOccurrence b
    top

    Output

    a
    1
    b
    b
    3
    f
    f
    2
    f
    f
    f
    
  • Input

    push ab
    pop 
    removeFirstOccurrence ba
    push c
    push ad
    size
    removeFirstOccurrence c
    size
    size
    size
    push c
    pop 
    push ca
    pop 
    push a
    pop 
    push c
    removeFirstOccurrence c
    top 
    top 
    push bc
    size
    top 
    removeFirstOccurrence bc
    size
    size
    push ab
    size
    removeFirstOccurrence ad
    push ad
    size
    top 
    push bc
    pop 
    pop 
    size
    push da
    pop 
    pop 
    push a
    push ba
    removeFirstOccurrence b
    removeFirstOccurrence a
    pop 
    size
    push bc
    top 
    push c
    top 
    push dc
    push d
    top 
    top 
    removeFirstOccurrence dc
    top 
    push b
    size
    pop 
    pop 
    removeFirstOccurrence c
    top
    

    Output

    2
    1
    1
    1
    ad
    ad
    2
    bc
    1
    1
    2
    2
    ad
    1
    0
    bc
    c
    d
    d
    d
    4
    bc
    
  • Information
    Author
    PRO1
    Language
    Catalan
    Official solutions
    Unknown. This problem is being checked.
    User solutions
    C++