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..













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;
}
Come l'avreste Risolto Voi?
Grazie Mille a tutti coloro che mi daranno consigli e pareri!!!
Ciao