#include #include #include #define clrscr() system ("cls") #define pause() system ("pause") //costante di grandezza della tabella #define DIM_TABELLA 20 int hash(char *chiave) { int indice=0, base=128; for(;*chiave!='\0';chiave++) indice=(base*indice+*chiave)%DIM_TABELLA; return indice; } int scan(char* k, char* tabella[], char* sentinella) { int indice, //punta alla chiave corrente primo, //se indice torna ad assumere il suo valore //il ciclo di scansione si considera terminato terminato; //nel while varrà true quando //primo==indice //inizializzazione primo=indice=hash(k); terminato=0; //ciclo di scansione while(!terminato && strcmp(tabella[indice],sentinella)!=0) //ci sono due vie per uscire dal ciclo: //1) quando si ritorna alla chiave di partenza (terminato) //2) quando si trova la prima chiave libera { //calcolo del prox indice indice=(indice+1)%DIM_TABELLA; //se l'indice corrente coincide col primo //allora considero il ciclo terminato if(primo==indice) terminato=1; } //fine del ciclo while //esito della scansione if(terminato) //se non si trova un posto libero per la chiave //allora si restituisce un valore di indice non ammissibile //che sarà interpretato all'esterno della funzione return DIM_TABELLA; else //altrimenti è implicito che sia stata trovata una locazione //libera e quindi se ne restituisce l'indice return indice; } void stampa_tab_hash(char* tabella[]) { for(int i=0;i