Вставка словарного слова в хэш-таблицу
Я делаю проект для вставки словарного слова в хэш-таблицу. Если произошло столкновение, добавьте новое слово в следующую позицию. Я создал массив указателей:
typedef struct WordNode * WordNodeP;
typedef struct WordNode
{
char word[WORDSIZE];
struct WordNodeP *next;
}WordNodeT;
WordNodeP table[TABLESIZE];
и я хэш каждого слова в словаре в указатель массива с помощью следующей функции:
хэш-функция:
int hashFunction(char word[]) //This function takes a string of word and break down each letter
{ //to integer value and use hash function. Then sum up all the values.
int i = 0;
int sum = 0;
while(word[i]!='\0'){
if((int)word[i] < 97) //If the ASC value of the letter is less than 97. It means it is a cap letter
sum+= 3*(i+1)*(i+1)*(word[i]+32);
else
sum+= 3*(i+1)*(i+1)*word[i];
i++;
}
if(sum > TABLESIZE) //TABLESIZE = 12001;
sum = sum % TABLESIZE;
return sum;
}
addWord:
void addWord(int val,char word[]) //This function adds words to specific index of array of LinkedList
{
if(table[val]!=NULL){ //If the position is occupied
WordNodeT *temp = createNewNode(word);
temp->next = table[val]->next;
table[val]->next = temp;
}
//printf("%s",table[val]->word);
//printf("%s\n",table[val]->word);
else
table[val] = createNewNode(word); //hash in the word to the table
}
CreateNewNode:
WordNodeP createNewNode(char word[])
{
WordNodeT* newNode = (WordNodeT*)malloc(sizeof(WordNodeT));
strcpy(newNode->word,word);
//printf("%s", newNode->word);
newNode->next = NULL;
return newNode;
}
Проблема в поисковой функции. Независимо от того, какое слово передано, оно всегда возвращает 0 (не найдено);
уважать:
int lookup(char * word) //see if word exists in the dictionary
{
int val;
val = hashFunction(word);
printf("hash value is %d\n",val);
WordNodeT *temp = table[val];
while(temp!=NULL){ //all the way through
if(strcmp(temp->word,word)== 0){
return 1;
}
temp = temp->next;
}
return 0;
}
Обратите внимание, что я положил
printf("hash value is %d\n",val)
в поиске для проверки hashValue.
В основном я кодирую:
printf("%d\n",lookup("hello"));
Для вывода я получил 5948 для hashValue и 0 для возвращаемого значения. Так как у меня есть 0 для возвращаемого значения, то я код для проверки цели:
WordNodeT *temp = table[5948];
while (temp->word!=NULL){
printf("%s",temp->word);
temp = temp->next;
}
Он печатает другие слова, одно из них - "гребешок", я вычислил его hashValue, hashValue "гребешка": ((1^2*3*115)+(2^2*3*99)+(3^2*3*97)+(4^2*3*108)+(5^2*3*108)+(6^2*3*111)+(7^2*3*112)) % TABLESIZE(что составляет 12001) = 9885;
Так вы, ребята, можете помочь мне с этим?