2015-07-06 2 views
-2

Я пытаюсь научиться создавать Hashtables в программировании на языке C. Моя программа просто базовая, где пользователь просто вводит в заданное слово, представляющее идентификатор ошибки, и подпрограмма в ответ на это выполняется.Как создать таблицу хэшей в C?

Теперь я хочу создать хеш-таблицу, которая могла бы соответствовать этим ошибкам, введенным пользователем с ошибками, хранящимися в хеш-таблице. Я написал хэш-функцию для кода, но то, что я не понимаю, создает остальную часть таблицы. Вот как создать запись, удалить ее и т. Д. В хэш-таблице.

хэш-функция Я создал выглядит примерно так и основывается на следующей логике:

  1. Типы пользователей в первые три буквы ряда (для бывших: один, два, Чет, и т.д.) ,
  2. Значение Ascii каждой буквы вычитается со значением ASCII 65.
  3. вычитаемых значение последней буквы умножается на число 26, а все остальные цифры, полученные на стадии 2, добавляют дать результат.

    int hashfunc(char letter){ 
        int answer; 
        if (strlen(letter)<=3) 
        { 
         printf('Invalid'); 
         return -1; 
        } 
        answer = (letter[0] -65)+(letter[1]-65) +(letter[2]-65)*26; 
        if (result<0) 
        { 
         printf('Error'); 
        } 
        return answer; 
        } 
    

Я не уверен, что если эта логика будет работать, но я хочу, чтобы дать ему попробовать. Теперь я не понимаю, как использовать эту хэш-функцию и создать таблицу.

Прошу совета.

+2

Покажите, что вы пробовали, пропустите менее подходящий фон. Сделайте еще несколько исследований. –

+0

Возьмите ключ, примените функцию хэша для ограничения своего диапазона, используйте ключ для доступа к массиву записей. Если происходит столкновение, либо используйте связанный список в каждом местоположении, либо смещайте его через хэш-таблицу на фиксированную сумму до тех пор, пока конфликт не будет разрешен. –

+0

Мы не можем вам помочь, если вы не покажете нам, что вы пробовали, и не объясните, что вы не понимаете о том, что вы пробовали. Пожалуйста, изучите, как создать MCVE ([Как создать минимальный, полный и проверенный пример?] (Http://stackoverflow.com/help/mcve)) или SSCCE ([Short, Self-Contained, Correct Example] (http://sscce.org/)) - два имени и ссылки для одной и той же базовой идеи. –

ответ

2

Предлагаю вам взглянуть на существующую реализацию, например. uthash. Вот пример кода (адаптирован с домашней страницы uthash):

struct my_struct { 
    int id;   /* error id */ 
    char word[10];  /* user input */   
    UT_hash_handle hh; /* makes this structure hashable */ 
}; 

struct my_struct *errors = NULL; 

void add_error(struct my_struct *s) { 
    HASH_ADD_INT(errors, id, s);  
} 
Смежные вопросы