Lösung Aufgabe 29
#include <stdlib.h>
struct hashentry {
char * text;
struct hashentry
*next;
};
struct hashentry * hashtafel[1024];
hmitte(char *text)
{
int l = strlen(text)/2;
unsigned short summe=0;
for (;l>=0;l--)
summe += ((unsigned
short*)text)[l];
summe = summe * summe;
summe = summe * 8;
summe = summe / 64;
return summe;
}
insert_hashtable(char *text, int adresse)
{
if (hashtafel[adresse]
== NULL)
{
hashtafel[adresse] = (struct hashentry *) calloc(1,sizeof(struct hashentry));
hashtafel[adresse] -> text = text;
hashtafel[adresse] -> next = NULL;
return 0;
}
else {
struct hashentry *zeiger = hashtafel[adresse];
while (zeiger->next != NULL)
zeiger = zeiger->next;
zeiger->next = (struct hashentry *) calloc(1,sizeof(struct hashentry));
zeiger->next -> text = text;
zeiger->next -> next = NULL;
return 0;
}
}
print_hashtable()
{
int i;
for (i=0;i<1024;i++)
if (hashtafel[i] == NULL) printf("%d: NULL\n",i);
else {
struct hashentry *zeiger = hashtafel[i];
printf("%d:",i);
do { printf("%s ",zeiger ->text);
zeiger = zeiger->next; }
while (zeiger != NULL) ;
printf("\n");
}
}
main()
{
int i,erg;
for (i=0;i<1024;i++)
hashtafel[i]
= NULL;
again:
{
char *text;
text = (char *)calloc(100,sizeof(char));
erg = scanf("%s",text);
if (erg != 1) goto ende;
printf("%s %hu\n",text,erg = hmitte(text));
insert_hashtable(text,erg);
goto again;
}
ende:
print_hashtable();
;
}