1

我正在尝试将哈希表实现为链表数组。目前我正在尝试创建一个简单的哈希表,其中键是数组的索引,值是用于实现链接的单链表。

这是我到目前为止编写的代码:

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

struct Node
{
    int value;
    struct Node *next; 
};
struct Node *hashtable[7];

int empty(int index)
{
    if(hashtable[index]==NULL)
        return 0;
    return 1;
}

void addNode(int frame,struct Node **iter)
{
    if(*iter==NULL)
       *iter=malloc(sizeof(struct Node));
    else
    {
        while((*iter)->next != NULL)
            (*iter)=(*iter)->next;

        (*iter)->next=malloc(sizeof(struct Node));
        (*iter)=(*iter)->next;

    }

    (*iter)->value=frame;
    (*iter)->next=NULL;
}


void print()
{
    int i;
    struct Node **iter;
    for(i=0;i<7;i++)
    {
        iter=&hashtable[i];        
        while(*iter !=NULL)
        {
            printf("%d%s%d\n",(*iter)->value,"--",i);
            (*iter)=(*iter)->next;
        }
    }
}

int main()
{
    int i=0,count=7;
    for(i=0;i<7;i++)
        hashtable[i]=NULL;
    i=empty(1);
    printf("%d",i);
    do
    {
        printf("Enter no:\n");
        scanf("%d",&i);
        struct Node** temp;
        temp=&hashtable[i-1%7];
        addNode(rand(),temp);
        count--;
        print();
    } while(count > 0);

    return 0;
}

当我调用 print 时,我只能看到一个元素添加到一个特定的索引,这是添加的最后一个元素,我在这里做错了什么?

4

1 回答 1

1
void add_node(int frame,struct Node **iter)
   {

        /* find (pointer to) NULL pointer at end of chain */
        for ( ; *iter; iter = &(*iter)->next ) {;}

        *iter = malloc(sizeof **iter );

        (*iter)->value = frame;
        (*iter)->next = NULL;

     }
于 2012-10-08T23:19:23.047 回答