Ciao, grazie per la risposta. Non ho messo tutto il codice perchè non volevo appesantire il topic
codice:
//Dizionario implementato con tavola hash con funzione hash perfetta (Comporta spreco di memoria)//con n chiavi distinte a cui viene associato un indice distinto, di consegunza n<=m
#include <stdio.h>
#include <stdlib.h>
#define M 100
#define DIM_ELEM 20
void insert(char* v[], char* e, int k);
void delete(char* v[], int k);
char* search(char* v[], int k);
int funzHash(char* v[], const void* k); //può trasformare chiavi di qualunque tipo in indici dell'array v[]
void print(char* v[]);
int menu();
int main(){
char* v[M];
int i;
for(i=0;i<M;i++)
v[i]=NULL;
int chiave;
while(1){
int scelta= menu();
char* elemento = (char*)malloc(DIM_ELEM * sizeof (char));
switch (scelta){
case 1:
printf("Inserisci chiave:\n");
scanf("%d", &chiave);
printf("Inserisci elemento:\n");
scanf("%s", elemento);
insert(v,elemento,chiave);
break;
case 2:
printf("Cerca chiave:\n");
scanf("%d", &chiave);
elemento=search(v,chiave);
if(elemento==NULL)
printf("Chiave non trovata.\n");
else
printf("Elemento trovato: %s\n", elemento);
break;
case 3:
printf("Cancella chiave:\n");
scanf("%d", &chiave);
delete(v,chiave);
break;
case 4:
print(v);
break;
default:
return 0;
}
}
return 0;
}
void insert(char* v[], char* e, int k){
k=funzHash(v, &k);
if(v[k]!=NULL){
printf("Esiste già un elemento con questa chiave.\n");
return;
}
v[k]=e;
printf("Voce inserita nel dizionario.\n");
return;
}
void delete(char* v[], int k){
k=funzHash(v, &k);
if(v[k]==NULL){
printf("Chiave non presente.\n");
return;
}
free(v[k]);
v[k]=NULL;
printf("Voce cancellata dal dizionario.\n");
return;
}
char* search(char* v[], int k){
k=funzHash(v, &k);
return v[k];
}
int funzHash(char* v[], const void* k){
return *(int*)k;
}
Questo è il codice. Puoi capire come viene usata e perchè.E' un esercizio di tipo accademico giusto per far comprendere la logica.
Grazie ancora