C - 将对象添加到链表



>我需要创建一个哈希表,数组中的每个单元格都必须是链表,以防发生冲突,用户可以添加字符或整数类型的值,

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*,然后创建一个结构对象并将其插入列表,问题是当我打印表格时,它会打印地址并将地址添加到列表中

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);

在示例代码中

int one = 1;
add(table, &one);

您将int变量的地址通过函数add()one传递给createObject(),后者分配一个Object结构并将指针复制到对象的data字段中,因此您的对象应包含该地址。

如果要查看示例变量的值one则必须将void*指针转换为正确的数据类型(在本例中int *),并在要打印指针时取消引用该指针。

printf("**%d** ", *(int*)table->arr[index]->data );

另一种选择是将Object更改为实际存储int值而不是void*,并在将实际数据复制到对象时取消引用指针。

(正如其他人已经提到的,您的代码包含更多问题。

相关内容

  • 没有找到相关文章

最新更新