0

私はハッシュテーブルに取り組んでいますが、行き過ぎていません。私の質問は、テーブルのサイズをどのように設定できるかです。(明確にするために、以下の説明をお読みください)。

これは私がやるべきことです:

/**
 * Create a new instance of struct hashStorage and return it. It sets the size of the
 * table to be of length "size" which will be the number of the entries in the hash. It takes also an
 * argument to specify the format of the order printed to an output stream. If myHash parameter
 * is NULL then this means that the hash should be a linked list. When myHash is NULL the size
 * parameter should be ignored.
 */

struct hashStorage {
    int    (*funcHash)  (int);
    void   (*printItem) (struct order *, FILE *);
    struct onode**      table;
    int    size;
};

struct hashStorage* createHash(int size, int (*myHash)(int),void(*printOrder)(struct order *, FILE *))
{
     struct hashStorage* hashList = (struct hashStorage*) malloc(sizeof(struct hashStorage));

     hashList->table;

    if(myHash == NULL)
    {

    }
    else
    {

    }
     return hashList;
}

誰かが私に与えることを説明できれば、例は大きな助けになります。

4

1 に答える 1

0

割り当てたオブジェクトの値を設定しようとします。あなたが直面している障害は次のとおりです。

  1. なんらかの理由で、連結リストとハッシュテーブルのデータ構造をマージしたいですか? それはばかげていますが、何でも...
  2. malloc必ずしもオブジェクトへのポインターを返すとは限りません。戻る場合がありNULLます。続行する前に確認する必要があります。
  3. の戻り値を割り当てるオブジェクトは、malloc割り当てようとしているオブジェクトではないため、機能しhashList = ...ません。*hashlist = ...またはを使用する必要がありますhashlist->member = ...

このコードの書き方は次のとおりです。

typedef size_t hash_fn(int);
typedef void print_fn(struct order *, FILE *);

struct hash_table {
    size_t       size;
    hash_fn      *hash_function;
    print_fn     *print_function;
    struct onode *item[];
};

struct hash_table *create_hash_table(size_t size, hash_fn *hash_function, print_fn *print_function)
{
    if (hash_function == NULL)
    {
        /* This should give you enough to implement your linked list;
         * use hash_table->item[0] as your item and hash_table->item[1]
         * as your link. */
        size = 2;
    }

    struct hash_table *hash_table = malloc(sizeof *hash_table
                                         + size * sizeof *hash_table->table);
    if (hash_table == NULL)
    {
        return NULL;
    }

    *hash_table = (struct hash_table) { .size = size
                                      , .hash_function = hash_function
                                      , .print_function = print_function };

    return hash_table;
}
于 2015-09-01T13:14:14.557 に答える