Cのハッシュ関数に構造を挿入する方法は?

user4231709

ハッシュ関数の実行を終了しましたが、すべてではなく同じアドレスを出力しているようです。また、まったく同じアドレスを何度も出力するだけです。これが構造体の配列に追加されるので、エラーは「Put」関数にあるとほぼ確信しています。しかし、バグがどこかにある場合に備えて、すべてのコードをここに残しておきます。ASCIIの任意のファイルを使用できるかどうかをテストするためにファイルからデータを取得します。事前のアドバイスありがとうございます!

私が作った構造はここにあります:

typedef struct HashNode{
char* key;
int data; 
struct HashNode* next;
} HashNode;

typedef struct Hashtable{
int size;   
struct HashNode** hashArray; 
} Hashtable;`

彼らは私が彼らに入力したものを保持していないので、彼らには何か問題があるに違いありません。

MOehm

あなたPutは常に同じ文字列、wordキーとしてあなたのハッシュに。その文字列は繰り返し上書きされており、最後のキーの内容が含まれています。(さらに悪いことに、ノードのhas値は、最後のキーを除いてキーと一致しません。)

これを修正する1つの方法は、ハッシュテーブルにキーを所有させることです。キーをコピーするか(おそらくを使用してstrdup)、構造内のキーを配列strcpyにします。それらをコピーするときは、既存のキーの値が上書きされるときではなく、キーが最初にhasテーブルに挿入されるときにのみコピーする必要があります。配列を使用する場合、特定の長さまでの文字列のみを処理できることは明らかです。

別の方法は、すべてのキーが異なるメモリアドレスを指していることを確認することです。これは、入力全体をメモリに格納し、キーポインタをそのメモリに作成する場合ですstrtokおそらく、からの結果です入力メモリは、少なくともハッシュテーブルと同じ長さである必要があります。

編集:単語を読み取るためのコードは、単語を32文字に制限します(その制限を強制することはありません!)。したがって、コードの簡単な修正keyは、youirノードエントリを32文字の配列にすることです。

typedef struct HashNode {
    char key[32];
    int data;
    struct HashNode *next;
} HashNode;

次に、内容をのキーにコピーする必要がありますPut交換

node->key = keyWord;

と:

strcpy(node->key, keyWord);

これでカウントは機能しますが、コードにはまだいくつかの問題があります。例えば:

  • スペースが連続している場合は、空の文字列を追加します。
  • またPut、新しいノードが本当に必要な場合にのみ、事前にノードにメモリを割り当てないでくださいそうしないと、メモリがリークします。
  • ハッシュ値はPut、クライアントコードではなく、によって計算する必要があります。これにより、全体で同じハッシュ関数が使用されるようになります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

clojureのハッシュマップにifを挿入する方法

分類Dev

ハッシュのこのデータ構造ハッシュを変換する巧妙な方法は?

分類Dev

挿入する前にパスワードをハッシュする方法は?

分類Dev

Java:ハッシュマップをMongoDBに挿入する方法は?

分類Dev

JQuery:関数をハッシュ値に適用する方法は?

分類Dev

アイテムをJavascriptハッシュに挿入する方法は?

分類Dev

Neovimに省略形のハッシュタグ開始行を挿入する方法

分類Dev

要素をハッシュツリーに挿入するためのCコードがMain()で機能するのに、関数を介して呼び出すと機能しないのはなぜですか?

分類Dev

JSON構造からMySQL列に複数の行を挿入する方法

分類Dev

ランダム化せずに構造体をネイティブにハッシュする方法は?

分類Dev

クラスまたは関数の定義をハッシュする方法は?

分類Dev

SimpleMessageListenerContainerに複数のコンシューマーを挿入する方法は?

分類Dev

同じ値を持つ複数のキーをJavaのハッシュマップに挿入するにはどうすればよいですか?

分類Dev

YAMLデータをカスタムBashデータ配列/ハッシュ構造に解析する方法は?

分類Dev

C# ハッシュ関数を C++ に変換する

分類Dev

Arduino / C ++を使用して構造全体を関数に出し入れする方法

分類Dev

crypt()関数で16進ハッシュを取得する方法は?

分類Dev

ハッシュルビーに構造を追加する

分類Dev

構造をバイトの配列として安全にハッシュできるのはいつですか?

分類Dev

オブジェクトの配列にハッシュマップを挿入する方法

分類Dev

構造体メソッドではない関数にキャッシュを実装する慣用的な方法は何ですか?

分類Dev

このハッシュ関数を逆にする簡単な方法はありますか?

分類Dev

値を逆に挿入するハッシュテーブル[C]

分類Dev

ハッシュ関数を作成する最良の方法

分類Dev

特定の位置にハッシュのエントリを挿入する

分類Dev

JavaScript:ウェブサイトの構造の状態をリンク(またはハッシュリンク)に保存する方法

分類Dev

構造体型をモジュール関数に渡す方法は?

分類Dev

JSONデータ構造に関数を挿入します

分類Dev

構造体の変数をベクトルにプッシュバックする方法

Related 関連記事

  1. 1

    clojureのハッシュマップにifを挿入する方法

  2. 2

    ハッシュのこのデータ構造ハッシュを変換する巧妙な方法は?

  3. 3

    挿入する前にパスワードをハッシュする方法は?

  4. 4

    Java:ハッシュマップをMongoDBに挿入する方法は?

  5. 5

    JQuery:関数をハッシュ値に適用する方法は?

  6. 6

    アイテムをJavascriptハッシュに挿入する方法は?

  7. 7

    Neovimに省略形のハッシュタグ開始行を挿入する方法

  8. 8

    要素をハッシュツリーに挿入するためのCコードがMain()で機能するのに、関数を介して呼び出すと機能しないのはなぜですか?

  9. 9

    JSON構造からMySQL列に複数の行を挿入する方法

  10. 10

    ランダム化せずに構造体をネイティブにハッシュする方法は?

  11. 11

    クラスまたは関数の定義をハッシュする方法は?

  12. 12

    SimpleMessageListenerContainerに複数のコンシューマーを挿入する方法は?

  13. 13

    同じ値を持つ複数のキーをJavaのハッシュマップに挿入するにはどうすればよいですか?

  14. 14

    YAMLデータをカスタムBashデータ配列/ハッシュ構造に解析する方法は?

  15. 15

    C# ハッシュ関数を C++ に変換する

  16. 16

    Arduino / C ++を使用して構造全体を関数に出し入れする方法

  17. 17

    crypt()関数で16進ハッシュを取得する方法は?

  18. 18

    ハッシュルビーに構造を追加する

  19. 19

    構造をバイトの配列として安全にハッシュできるのはいつですか?

  20. 20

    オブジェクトの配列にハッシュマップを挿入する方法

  21. 21

    構造体メソッドではない関数にキャッシュを実装する慣用的な方法は何ですか?

  22. 22

    このハッシュ関数を逆にする簡単な方法はありますか?

  23. 23

    値を逆に挿入するハッシュテーブル[C]

  24. 24

    ハッシュ関数を作成する最良の方法

  25. 25

    特定の位置にハッシュのエントリを挿入する

  26. 26

    JavaScript:ウェブサイトの構造の状態をリンク(またはハッシュリンク)に保存する方法

  27. 27

    構造体型をモジュール関数に渡す方法は?

  28. 28

    JSONデータ構造に関数を挿入します

  29. 29

    構造体の変数をベクトルにプッシュバックする方法

ホットタグ

アーカイブ