使用链接c代码进行散列

时间:2013-08-28 06:54:53

标签: c algorithm pointers hash

这是带链接代码的散列。我在这里有一些指针疑惑

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

我不知道这个结构实际上是如何工作的? 我们可以将任何指向结构的指针转换为数组???

1 个答案:

答案 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