En aquest exercici implementareu una nova classe de dades, anomenada HotSet. Els objectes d’aquesta classe representen conjunts d’elements d’un cert tipus T sense repeticions, ordenats per ordre de consulta o d’inserció. La idea d’aquesta estructura és que els elements més freqüentment consultats o inserits quedin a l’inici de l’estructura, i per tant es redueixi molt el cost d’accedir-hi, ja que la cerca és lineal.
El cas d’ús d’un HotSet són els problemes on la probabilitat de tornar a utilitzar un element del HotSet que s’ha usat recentment és molt més alta que la probabilitat d’usar altres elements.
La classe s’implementa amb una llista simplement encadenada: els elements tenen l’adreça del següent, però no de l’anterior. L’estructura també té un sentinella, de nom sent, que és un element que marca l’inici, però no té contingut.
La plantilla del fitxer hot_set.hh per fer la implementació és la següent:
#ifndef HOT_SET_HH
#define HOT_SET_HH
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class HotSet {
public:
HotSet() {
tam = 0;
sent = new nodo;
sent->seg = nullptr;
}
/// >>>> Implementar aquí els mètodes públics <<<<
private:
struct nodo {
T info;
nodo *seg; // apuntador al següent element
};
nodo *sent; // apuntador al sentinella, que *no* és pròpiament un element
int tam;
/// >>>> Implementar els mètodes privats necessaris <<<<
};
#endif // HOT_SET_HH
Així doncs:
HotSet que està buit sempre tindrà el sentinella, i es compleix que sent->seg == nullptr;HotSet té un o més elements, sent->seg apunta al primer element; i,HotSet no té successors, és a dir, si ult és un apuntador a l’últim element, llavors ult->seg == nullptr.
Es tracta, doncs, d’implementar els mètodes que falten de la classe HotSet, de tal manera que el programa principal (sense modificar) funcioni correctament.
Entrada
El programa principal ja es proporciona (també el Makefile), a la icona del gatet, i llegeix una seqüència de comandes que exerceixen les operacions de la classe HotSet. Cada comanda és una línia que comença amb una paraula i crida algun mètode del HotSet.
Sortida
La sortida també està implementada en el programa principal. Cada vegada que es crida a un mètode de la classe HotSet, es mostra algun missatge a la sortida estàndard.
Observació
Envieu un .tar tal com el que us podeu baixar a la icona del gatet, afegint el fitxer hot_set.hh amb la vostra implementació.
Input
ins 1 ins 2 front ins 3 has 1 front size has 3 show
Output
primero: 2 1 pertenece primero: 1 3 elementos 3 pertenece 3 1 2
Input
ins 1 ins 2 ins 3 show ins 2 show has 5 has 3 front ins 1 show
Output
3 2 1 2 3 1 5 no pertenece 3 pertenece primero: 3 1 3 2