Мне нужно создать хеш-таблицу, в которой каждая ячейка в массиве должна быть связанным списком, в случае коллизий пользователь может добавить значения типа char или int,
Object* createObject(void* data)
{
if (data != NULL)
{
Object* object = (Object*)malloc(sizeof(Object));
if (object == NULL)
return NULL;
object->data = data;
object->next = NULL;
return object;
}
}
у меня также есть функция add, она принимает void *, а затем создает объект struct object и вставляет его в список, проблема в том, что когда я распечатываю таблицу, в которой печатается адрес, и добавляет в список адрес
int add(Table* table, void* data)
{
int d = 1;
int key = 0;
int index = 0;
if (table == NULL || data == NULL)
return -1;
//Object*obj_data=createObject(data);
if (table->Table_tybe == 0)
{
key = intHashFun((int*)data, table->size);//it returns the hash function int value
}
else
key = strHashFun((char*)data, table->size);
index = key*d;
Object*tmp = table->arr[index];
Object*obj = tmp;
while (tmp != NULL)
{
obj = tmp;
tmp = tmp->next;
}
if (obj == NULL) {
table->arr[index] = createObject(data);
printf("**%d** ", table->arr[index]->data);
table->arr[index]->next = NULL;
}
else
{
int j = 0;
if (obj->next == NULL)
{
//tmp->next=createObject(data);
obj->next = createObject(data);
obj = obj->next;
obj->next = NULL;
return;
}
вот структуры
typedef struct Object {
void* data;
struct Object* next;
}Object;
typedef struct Table {
Object** arr;
int size;
int Table_tybe;
int Table_length;//list length
}Table;
int size = 3;
int listlength = 5;
Table* table = createTable(size, 0, listlength);
int one = 1;
add(table, &one);