使用链接的散列 table 存在问题

There is a problem with the hash table using chaining

#include <stdio.h>
#include <stdlib.h>

typedef struct {
   int value;
   struct Hashnode* next;
} Hashnode;

void add(int value);
void print();   

Hashnode Hash[11];

int main() {
   add(12);
   add(44);
   add(13);
   add(88);
   add(23);
   add(94);
   add(11);
   add(39);
   add(20);
   add(16);
   add(5);
   print();
   return 0;
}


void add(int value) {
   int hashIndex = value % 11;

   Hashnode* newNode = (Hashnode*)malloc(sizeof(Hashnode));
   newNode->next = NULL;
   newNode->value = value;


   if (Hash[hashIndex].value == NULL) {   //firstValue
      Hash[hashIndex].next = newNode;

   }
   else {      // if have a value starting chaining
      Hashnode* temp = Hash[hashIndex].next;
      while (temp != NULL) {
         temp = temp->next;
      }
      temp->next = newNode;
   }
}


void print() {
   Hashnode* temp;
   for (int i = 0; i < 11; i++) {
      temp = Hash[i].next;
      while (temp->next != NULL) {
         printf("%d, %d\n", i, temp->value);
         temp = temp->next;
      }
   }
}

我使用链接创建了一个散列 table,但是有一个问题。 如果按照main函数进入并打印结果值,则不会出现被视为碰撞的部分。 请告诉我是输入功能还是打印功能的问题。

#include <stdio.h>
#include <stdlib.h>

struct Hashnode{
   int value;
   struct Hashnode* next;
};

void add(int value);
void print();   

struct Hashnode* Hash[11];

int main() {
   add(12);
   add(44);
   add(13);
   add(88);
   add(23);
   add(94);
   add(11);
   add(39);
   add(20);
   add(16);
   add(5);
   print();
   return 0;
}


void add(int value) {
   int hashIndex = value % 11;

   struct Hashnode* newNode = (struct Hashnode*)malloc(sizeof(struct Hashnode));
   newNode->next = NULL;
   newNode->value = value;


   if (Hash[hashIndex] == NULL) {   //firstValue
      Hash[hashIndex] = newNode;
   }
   else {      // if have a value starting chaining
      struct Hashnode* temp = Hash[hashIndex];
      while (temp->next != NULL) {
         temp = temp->next;
      }
      temp->next = newNode;
   }
}


void print() {
   struct Hashnode* temp;
   for (int i = 0; i < 11; i++) {
      temp = Hash[i];
      while (temp != NULL) {
         printf("%d, %d\n", i, temp->value);
         temp = temp->next;
      }
   }
}

你必须做这样的事情。使用地址存储而不是 Hashnode 作为数组。感谢 Eugene Sh. 他指出了你所有的错误。