オープンハッシュのプログラム作成について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
snr

オープンハッシュのプログラム作成について

#1

投稿記事 by snr » 6年前

C言語にてオープンハッシュ法によるハッシュテーブルの作成するプログラムを作成しています。

構造体と連結リストを利用しての作成なのですが、ポインタ及び構造体のことが深く理解しておらず、エラーの原因を取り除くことが出来ません。

具体的には、以下のコードによって作成したbucketsという配列と連結リストの
型の違いについてを教えてください

pという変数をどのように代入して使うのかがわかりません。

コード:

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

#define HASH_M 3

//リスト
typedef struct list{
  long  key;
  struct cell *next;
} List;

//ハッシュテーブル
typedef struct hash{
  long bucket_num;
  List **buckets;
} Hash;

//ハッシュ関数
long h(long x){
    return x % HASH_M;
}

//ハッシュ作成
Hash *OpenHashTableMake(Hash *hash_table , long x){
    long ind = h(x);
    List *new = (List *)malloc(sizeof(List));
    List *p;
    if(new != NULL){
        new->key = x;
        new->next = NULL;
        if(hash_table->buckets[ind] == NULL){
            //先頭
            hash_table->buckets[ind] = new;
        }else{
            p = (hash_table->buckets)[ind];
            while(p->next == NULL){p=p->next;}
            p->next = new;
        }
    }else{
        printf("cant alloc new\n");
        return NULL;
    }
    return hash_table;
}

Bull
記事: 149
登録日時: 9年前

Re: オープンハッシュのプログラム作成について

#2

投稿記事 by Bull » 6年前

とりあえずリストは

コード:

typedef struct list {
	long  key;
	struct list *next;
} List;
ではないでしょうか。

snr
記事: 4
登録日時: 6年前

Re: オープンハッシュのプログラム作成について

#3

投稿記事 by snr » 6年前

あっ!!!!

エラーの原因がわかりました。。。
どうもありがとうございました。すべて解決したみたいです

返信

“C言語何でも質問掲示板” へ戻る