я столкнулась с трудностями при реализации открытой адресации хэш-таблицу на языке программирования C:открытой адресации разрешения коллизий
#ifndef COMDS_OPENADDR_HASH_TABLE
#define COMDS_OPENADDR_HASH_TABLE
#define COMDS_KEY_EXIST 1
#define COMDS_REALLOC_FAIL 2
struct kv_pairs {
void *key;
void *value;
};
typedef struct openaddr_hash_table {
size_t buckets;
size_t used;
size_t (*hash)(void *data);
struct kv_pairs *table;
int (*key_equal)(void *fkey, void *skey);
int (*value_equal)(void *fvalue, void *svalue);
}OpenAddrHashTable;
#endif
Так вот я использую массив структур kv_pairs, чтобы держать мои ключи и значения, проблема что у меня должно быть 3 специальных значения: DELETED, USED, СВОБОДНЫЙ, чтобы указать, что местоположение удалено/использовано/бесплатно, я не знаю, как кодировать эти значения?
Я попытался установить STRUCT kv_pairs состоянии и установить бесплатно 0x0 УДАЛИТЬ 0x1 и ИСПОЛЬЗУЕМЫЕ 0x2 и делает сравнение, как этот
table[i] == FREE || table[i] == (struct kv*)DELETED
И что случилось с тем, что вы пробовали? Какие у вас проблемы (помимо сравнения несвязанных указателей, которые являются [неопределенным поведением] (http://en.wikipedia.org/wiki/Undefined_behavior))? Вы пытались добавить флаг в любую структуру? –
Вы не можете определить значение, которое определенно будет недействительным значением адреса на любой данной платформе. Поэтому не следует определять эти 3 значения. Вместо этого выделите 3 глобальных или статических переменных и используйте их адреса. Кроме того, вы, вероятно, хотите провести сравнение с таблицей [i] .value' (хотя это немного сложно понять из вопроса). –
Я попытаюсь проверить, свободна ли таблица [i] или используется перед проверкой значения – karim