这是带链接代码的散列。我在这里有一些指针疑惑
struct hash* hashTable = NULL;
int eleCount = 0;
struct node
{
int key;
int age;
char name[100];
struct node* next;
};
struct hash
{
struct node* head;
int count;
};
struct node* createNode(int key, char *name, int age)
{
struct node* newnode;
newnode = (struct node *)malloc(sizeof(struct node));
newnode->key = key;
newnode->age = age;
strcpy(newnode->name, name);
newnode->next = NULL;
return newnode;
}
void insertToHash(int key, char *name, int age)
{
int hashIndex = key % eleCount;
struct node* newnode = createNode(key, name, age);
/* head of list for the bucket with index "hashIndex" */
if (!hashTable[hashIndex].head)
{
hashTable[hashIndex].head = newnode;
hashTable[hashIndex].count = 1;
return;
}
/* adding new node to the list */
newnode->next = (hashTable[hashIndex].head);
/*
* update the head of the list and no of
* nodes in the current bucket
*/
hashTable[hashIndex].head = newnode;
hashTable[hashIndex].count++;
return;
}
hashTable
如何变成一个数组,它是一个指向哈希的指针?
而且,究竟是什么
struct hash
{
struct node* head;
int count;
};
我不知道这个结构实际上是如何工作的? 我们可以将任何指向结构的指针转换为数组???
答案 0 :(得分:0)
hashTable
确实是指向结构的指针。但是,在代码中的某处(您没有显示)内存被分配给struct hash
的数组。然后将此内存的地址分配给hashTable
。然后当你执行hashTable[index];
时,你只需访问这个已分配的数组。
在C中,当您编写hashTable[index];
时,这与*(hashTable + index)
相同。然后,将index
添加到此指针会导致地址index * sizeof(struct hash)
更远。这具有“跳转”到数组中index
'元素的效果。
有关详细信息,请阅读appropriate section in the C FAQ。