Ciao, grazie per la risposta. Non ho messo tutto il codice perchè non volevo appesantire il topic
Questo è il codice. Puoi capire come viene usata e perchè.E' un esercizio di tipo accademico giusto per far comprendere la logica.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; }
Grazie ancora

Rispondi quotando