Esborrat de totes les aparicions d'un element a una llista X10002


Statement
 

pdf   zip   tar

html

Considerem la representació habitual amb nodes de la classe Llista per manegar llistes genèriques d’elements de tipus T que podeu trobar als fitxers publics.

Els nodes són doblement encadenats amb punters al següent (seg) i a l’anterior (ant). Una llista té quatre atributs; la longitud i tres punters a nodes, un pel primer element (primer_node), un per l’ultim (ultim_node) i un altre per l’element actual (act), on tenim situat el punt d’interès de la llista.

Recordeu que si l’act d’una llista no buida té valor null significa que el punt d’interès està situat a la dreta de tot, a sobre d’un element fictici posterior a l’últim element real.

Volem implementar dins d’aquesta classe una operació nova amb la següent especificació pre/post:

void esborrar_tots(const T& x) /* Pre: parametre implicit = P */ /* Post: s'han eliminat del parametre implicit totes les aparicions d'x (la resta d'elements queda en el mateix ordre que a P); si el punt d'interes de P referenciava a una aparicio d'x, passa a referenciar al primer element diferent d'x posterior a aquesta (si no hi ha cap element diferent d'x, passa a la dreta el tot); en cas contrari, el punt d'interes no canvia */

Exemples:

Si x = 5 i el paràmetre implícit es

1 3 5 7 12 5 5 5 25

amb el punt d’interes sobre el 7, llavors el nou paràmetre implícit ha de quedar

1 3 7 12 25

amb el punt d’interès sobre el 7.

Si x=5 i el paràmetre implícit és

1 3 5 7 12 5 5 5 5

amb el punt d’interès sobre el penúltim 5, llavors el nou paràmetre implícit ha de quedar

1 3 7 12

amb el punt d’interès a la dreta del tot.

Dissenyeu aquesta operació sense utilitzar cap de les operacions primitives de les llistes, accedint directament als atributs de la classe Llista.

Entrada

L’entrada es una llista y un element x.

Sortida

La sortida es la llista obtinguda després d’haver eliminat de la llista d’entrada tots els nodes que contenien l’element x. A més a més, el punter act ha de seguir apuntant al mateix element al que apuntava abans de cridar el mètode o, si referenciava a un node que contenia x, ha d’apuntar al següent element (si n’hi ha) o a la dreta del tot (si no n’hi ha). Enrecordeu-vos d’actualitzar la longitud de la llista i de esborrar correctament tots els elements amb l’operador delete, d’altra banda el resultat no serà acceptat pel Jutge.

Observació

Només s’ha d’enviar un fitxer que contengui la funció amb la capçalera de l’enunciat i qualsevol altra funció auxiliar que cregueu convenient, sense la funció main i sense posar-hi cap “include”.

Information
Author
Alberto Moreno (adaptador), Ramon Ferrer i Cancho (responsable)
Language
Catalan
Official solutions
Unknown.
User solutions
C++