Ok, ho fatto qualche ricerca e ho capito l'errore, la funzione delete era completamente sbagliata. Ecco la correzione, che non mi genera almeno errori di compilazione:
codice:
void delete(hash_table *ht, int x){
int k = hash(x,ht);
int_list*p = ht -> h_table[k];
int_list*q = ht -> h_table[k];
if(p == NULL) return;
while(p -> info == x){
p = p -> next;
ht -> h_table[k] = p;
free(q);
q = p;
--(ht -> n_elem);
}
Se va bene, potreste dirmi come procedere con la funzione index_max_bucket?
Non ho idea proprio di come fare, grazie mille a tutti.
Quello che so, oltre ai commenti sul codice è:
"Tale tabella sara' gestita con liste di trabocco, quindi ogni bucket della tabella e' un puntatore alla testa della lista contenente gli elementi che, secondo la funzione hash utilizzata, sono stati inseriti in quel bucket. Gli elementi inseriti, quindi, saranno memorizzati come elementi di una lista di interi int_list."
Riporto anche le definizioni delle strutture int_list e hash_table.
codice:
//Definizione struttura lista di interi - NON MODIFICARE
typedef struct int_list{
int info;
struct int_list *next;
} int_list;
//Definizione della struttura hast_table - NON MODIFICARE
typedef struct hash_table{
//vettore di puntatori a lista di interi
int_list **h_table;
//dimensione del vettore di puntatori h_table
int t_size;
//numero di elementi contenuti nella tabella
int n_elem;
} hash_table;
Grazie mille a chiunque mi aiuti, non vorrei mettervi fretta ma purtroppo ho necessità di finire il compito entro stasera, ho provato a sbatterci la testa da solo ma non ne ho ricavato nulla, quindi mi affido a voi.
ciao a tutti