ちょっと、私はここ数日間、Cのポインタ、構造体、データ構造について読んでいました。今度は、このチュートリアルに従うことで、Cでハッシュテーブルを実装しようとしています。https://www.tutorialspoint.com/data_structures_algorithms/hash_table_program_in_c.htmCでHashTable(衝突を避けるためにリンクリストを使用する)を実装するために必要な構造体はありますか?
しかし、tutorialspointは1つのハッシュテーブルしか存在しないと仮定し、グローバル化しています。さらに、tutorialspointは衝突を考慮しません。
構造体を1つのハッシュテーブルに限定しないようにしたいのですが、私はリンクされたリストで(衝突に対処するために)連鎖を組み込む予定です。私が説明する必要が
typedef struct node {
int key;
int data;
struct node* next;
} node;
typedef struct linkedList{
node* head;
node* tail;
size_t size;
} linkedList;
typedef struct hashTable{
//perhaps an array of linked list? This member is what I need help with
//And other potential members I am overlooking
size_t size
} hashTable;
いくつかのもの:私は、以下の持っている
ノードの構造体は、キー/データのペアとして機能し、それが持っている次のペアへのポインタを持っています同じハッシュコード。同じハッシュコードを持つすべてのノードは同じリンクリストに含まれます。
linkedList構造体は、最終的にハッシュテーブルの行になるリンクリストを表します。すべてのリンクリストは、ハッシュテーブル内の行になります。
hashTable構造体には、すべてのlinkedListsが含まれています。
どのように私はハッシュテーブルの構造体でのLinkedList構造体の配列を作ることができますか?私の3つの構造体で見落としている他のメンバはありますか?
ご協力いただきましてありがとうございます。
P.S.私はLinked Listプログラムで書いた方法を使うつもりです。 https://codereview.stackexchange.com/questions/176904/my-linked-list-implementation-in-c
構造体のメンバーは完全に任意であり、使用したい要素を反映する必要があります。私は 'size'、' data'、およびkeyを一つの構造体に組み合わせることは、関連していない限り、あなたが考えることができるものであると提案します。 (あなたが示したコードのものだと思われます)。通常、暗号化されたオブジェクトから何かを取得するためにキーが使用されます。ハッシュされたものは回復できないので、なぜキーが必要ですか? – ryyker
@rykkerペア(アイテムから名前を変更して名前を変更しました)構造体は、データとそのキーを含むペアであることを意味します。 hashTable構造体は、ペアを含む実際のハッシュテーブルです。だから私は関係する人を意味しませんでした。 – Frankg26
@rykker私はOPを編集しました。おそらくHashMapは私が達成しようとしているもののより良い名前ですか?このプログラムは、値をテーブルに格納してから、キーを介して東へのアクセスを許可することを目的としています。ユーザーは自分のテーブルに挿入されているものを回復できるはずです。 – Frankg26