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を呼び出すと、1つの特定のインデックスに追加された要素が1つしか表示されません。これは、最後に追加された要素です。ここで何が間違っているのでしょうか。

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 に答える