PDA

Visualizza la versione completa : [C++] Tabella hash con liste


asiul
19-12-2005, 15:35
Devo fare un programma che faccia una tabella hash utilizzando le liste. Devo avere un vettore dinamico dai cui elementi partono le liste. Ovviamente una lista per elemento.
Poi dovrò inserire, cercare, stampare ecc. Durante l'esecuzione devo calcolare il tempo che impiega ad inserire tot elementi variando di volta in volta la dimensione della tabella ed il numero di dati che inserisco, per questo voglio vettori dinamici!
Ma io mi blocco sul vettore dinamico perché non l'avevo mai visto e non so come usarlo.
Secondo voi questo codice ha un senso?
(Mi sento una capra :nonlodire )



#include<time.h>
#include <iostream>

using namespace std;

class Dizionario {
public:
bool insert (int dato);
bool search(int dato);
Dizionario(); //???
}

struct Node {
int key;
Node *next;
Node(int key) {next=NULL; key=key;}
};


class Lista {
public:
Node *testa;
Node *PosizCorrente;
Lista() {testa=NULL;PosizCorrente=NULL;};
bool search(int dato);
bool insert(int dato);
};

class DizionarioLista:public Dizionario {
int n;
int *vett;
vett=new Lista *Lista[n]; // E' un vettore di puntatori a Lista?

}

Ho scritto anche altro e poi ho compilato per vedere che errori mi dava e in corrispondenza di "vett=new Lista *Lista[n]" mi dice:
'new' cannot appear in constant-expression e
ISO C++ forbids declaration of 'vett' with no type e
ISO C++ forbids inizialization of member 'vett' making 'vett' static
e altri 2 errori simili...insomma su una riga 5 errori!! :cry:
Uso dev c++! :cry:

PS: Devo seguire le indicazioni del prof, quindi la distribuzione delle classi ecc dev'essere questa!

fgr
19-12-2005, 18:56
Originariamente inviato da asiul
[...]
class DizionarioLista:public Dizionario {
int n;
int *vett;
vett=new Lista *Lista[n]; // E' un vettore di puntatori a Lista?

}
Non mi dilungo in spiegazioni tecniche perche` il tuo professore sapra' darteli meglio di me.
Comunque, a prima vista: hai dichiarato un puntatore intero e per forza di cose e` errato. Al limite dovevi scrivere, per un vettore di puntatori di tipo Lista:
Lista* vlist[];

asiul
23-12-2005, 10:37
Originariamente inviato da fgr
Non mi dilungo in spiegazioni tecniche perche` il tuo professore sapra' darteli meglio di me.
Comunque, a prima vista: hai dichiarato un puntatore intero e per forza di cose e` errato. Al limite dovevi scrivere, per un vettore di puntatori di tipo Lista:
Lista* vlist[];

Ovviamente non ho capito! :D :(

fgr
23-12-2005, 11:51
Originariamente inviato da asiul
Ovviamente non ho capito! :D :(
cosa, la dichiarazione di puntatori a lista?

asiul
23-12-2005, 19:47
Originariamente inviato da fgr
cosa, la dichiarazione di puntatori a lista?

Sì, non ho capito l'unica cosa che avevi scritto! :(
Cioè io devo fare un vettore dinamico di puntatori che puntano ognuno alla testa di una lista...questo è quello che devo fare, ma non ho capito cosa ho sbagliato :(

albgen
23-12-2005, 21:38
non puoi inzializzare un campo dati nella dichiarazione di una classe !!!
lo devi dentro al costruttore oppure fuori dalla classe se è un campo dati di tipo statico..
:ciauz:

asiul
24-12-2005, 16:32
Originariamente inviato da albgen
non puoi inzializzare un campo dati nella dichiarazione di una classe !!!
lo devi dentro al costruttore oppure fuori dalla classe se è un campo dati di tipo statico..
:ciauz:

Figurati, non mi sembrava nemmeno di averlo inizializzato :confused: , ma ho capito quello che dici!

albgen
24-12-2005, 17:26
puoi fare una cosa cosi':



class DizionarioLista:public Dizionario {
private:
int n;
int* vett;
public:
Dizionario(int n=0);
};

Dizionario::Dizionario(int n){

//questo è un costruttore con un parametro
vett = new Lista[n];

}

per es;
nel main quando vuoi un dizionario con 5 elementi scrivi:
Dizionario d(5);
oppure se scrivi;
Dizionario d2;//si intende con zero elementi

cmq, devi leggere un po di tutorial per la programmazione a oggetti in c++, altrimenti farai fatica...

asiul
25-12-2005, 11:35
Grazie!
Veramente dopo corsi di C/C++/Java dovrei già sapere! :cry:
Il problema è che avevo visto liste, avevo visto vettori, avevo visto classi ma non avevo visto classi con vettori dinamici di liste :confused: !
Di solito Internet è una grande risorsa ma questa volta ho trovato poco! Certo, classi semplici, liste e vettori so usarli abbastanza!
Il prof mi da una mano ma questo programma dovrebbe essere parte dell'esame, quindi non può farmelo lui!!!! :(

Loading