Questo è l'esercizio che ho portato all'esame il codice lo trovate sotto dopo il testo dell'intestazione:
"Scrivere un programma che legga da tastiera una sequenza di n interi distinti e li inserisca in una tabella hash di dimensione 2n posizioni utilizzando
liste monodirezionali per risolvere eventuali conflitti.
Utilizzare la funzione hash h(x)=((ax + b)%p)%2n dove p `e
il numero primo 999149 e a e b sono interi positivi minori di 10.000 scelti
casualmente.
Una volta inseriti tutti gli interi, il programma deve stampare la lunghezza massima delle liste e il numero totale di conflitti.
Prima di scrivere il programma chiedersi perchè la tabella ha dimensione
2n e non n."
Aiutatemi a risolvere questo esercizio anche se oramai è andata.. il prof ci ha vietato gli stack.
Questo l'avevo preparato ma lui ha detto che non va appunto perchè ci sono gli stack lo esige senza e più elementare. Qui c'è il link al mauale dell'esercizio, Circa pag. [20-24], se vi dovesse servire e aiutare a carpire meglio..
Come l'avreste Risolto Voi?codice:#include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct elem { char valore[15]; struct elem* next; } List; typedef List stack; int main() { stack* ht[20]; for(int i=0;i<sizeof(ht)/sizeof(stack*);i++) { ht[i] = (stack*)malloc(sizeof(stack)); char s[20]; sprintf(s, "Valore: %d\n", i); strcpy(ht[i]->valore, s); printf(ht[i]->valore); } stack* htPtr = &(*ht[0]); printf((htPtr++)->valore); system("pause"); return 0; }
Grazie Mille a tutti coloro che mi daranno consigli e pareri!!!
Ciao



Rispondi quotando
