E' pieno di errori, prima di fare la funzione index_max_bucket devi provvedere a correggere questi errori (alcuni sono gravi, tipo quando confronti un doppio puntatore con un intero).
Te li ho segnati:
codice:
#include <stdio.h>
#include <stdlib.h>
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;
/*
Funzione di creazione ed inizializzazione di una tabella hash.
La funzione prende in input la dimensione del vettore di puntatori della tabella da creare e restituisce
il puntatore alla struttura hash_table allocata.
La funzione deve:
- Allocare la zona di memoria per la struttura hash_table
- Allocare il vettore di puntatori a int_list della hash_table
- Inizializzare i puntatori del vettore a NULL
- Inizializzare t_size a size e n_elem a 0.
*/
hash_table * create_hash_table(int size){
hash_table* ht = (hash_table*)malloc(sizeof(hash_table));
ht->h_table = (int_list **)malloc(sizeof(int_list *) * size);
int i;
for (i = 0; i < size; i++)
ht->h_table[i]=NULL;
ht->t_size=size;
ht->n_elem=0;
// non ritorni alcun valore
}
/*
Funzione di inserimento nella tabella hash.
La funzione prende ininput la hash_table ed il valore intero da inserire.
La funzione deve:
- Allocare una zona di memoria per il nuovo elemento della lista
- Porre il valore info dell'elemento allocato ad x
- Inserire l'elemento IN TESTA alla lista con indice hash(x,ht)
- Aggiornare n_elem
*/
void insert(hash_table *ht, int x){
int i = hash(x, ht);
int_list *new_element = malloc(sizeof(int_list));
new_element->info = x;
new_element->next = ht->h_table[i];
ht->h_table[i] = new_element;
ht->n_elem++;
}
/*
Funzione di eliminazione delle occorrenze di un valore
La funzione prende in input la tabella hash ed il valore da eliminare
La funzione deve:
- Rimuovere tutti gli elementi con valore x dalla tabella. Tali elementi, se esistono, si troveranno nel bucket con indice h(x,ht)
- Aggiornare n_elem
Ricordarsi di deallocare la memoria degli elementi rimossi.
*/
void delete(hash_table *ht, int x)
{
int i,j;
for (i=0; i< ht->n_elem;i++)
{
if (ht->h_table==x) // x + un intero, ht->h_table è di tipo int_list**, cosa vuoi fare?
{
for (j = i +1; i < ht->n_elem; i++)
{
ht->h_table[j-1] = ht->h_table[j];
}
ht->n_elem--;
}
}
} // mancava la graffa
PS: Per non stare a leggere tutto il codice, puoi dirmi in maniera breve come hai implementato la hash table?