2011-10-28 9 views
1

C99の独立したベクトルデータ構造に依存するハッシュテーブルを作成したいとします。私はOOの助けを借りてC++でこれを行うことができますが、構造体と共用体を使用してこれにアプローチする方法は不明です。C99のHashTableとVectorのようなデータ構造

リンクされた例には、非常に複雑なハッシュ関数を持つハッシュテーブルの実装は含まれていないことをお勧めします。私は特に衝突やストレージの効率については気にしません。私はちょうど進歩する方法についてのアドバイスか、それぞれのデータ構造の機能ではなくフォームを例示する簡単な例を求めています。

答えて

1

完全に一般的な方法で成長するハッシュテーブルを実装したいと正確に推測する場合は、多くのvoidポインタが必要です。ベクトルはあまりにも難しいことではありません、それだけでタイピングがかかる:

typedef struct { 
    size_t capacity, nelems; 
    void **contents; 
} Vector; 

enum { INITIAL_CAPACITY = 256 }; 

Vector *make_vector() 
{ 
    Vector *v = malloc(sizeof(Vector)); 
    if (v == NULL) 
     return NULL; 
    v->capacity = INITIAL_CAPACITY; 
    v->contents = malloc(sizeof(void *) * v->capacity); 
    if (v->contents == NULL) { 
     free(v); 
     return NULL; 
    } 
    v->nelems = 0; 
    return v; 
} 

// exercise for the reader 
int vector_append(Vector *, void *); 
void *vector_at(Vector const *); 

あなたのサイズを渡す必要があり、すなわち、一般的なハッシュ関数はプロトタイプsize_t hash(void const *, size_t)を持っているということを覚えておいてください。

(注:見逃しがちなC++のOOPの機能ではなく、テンプレート、購入するタイプの安全性、演算子のオーバーロードなどの構文上の砂糖です。詳細はOpenBSDのohashライブラリをご覧ください。 )

1

次の書籍は、おそらく両方のリンクリストと構造体を使用してCでハッシュテーブルの最良の説明があります。

http://en.wikipedia.org/wiki/The_C_Programming_Language_(book

それだけでなく、単純なハッシュアルゴリズムを実装しています。ここで定義されているよう

別の、シンプルでありながら均一に分散ハッシュアルゴリズムは、CDBのアルゴリズムです:

http://cr.yp.to/cdb/cdb.txt

関連する問題