0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 49
1

Организация хеш-таблиц

02.05.2017, 17:19. Показов 2425. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытался разобраться с работой с хеш таблицами и посмотрел урок :
https://www.slideshare.net/mku... lideshow=1
Полностью повторил код, но компилятор выдает ошибку, помогите разобраться как заставить сиё чудо работать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
#define HASHTAB_SIZE 71
#define HASHTAB_MUL 31
 
struct listnode {
    char *key;
    int value;
struct listnode *next;
 
};
 
struct listnode *hashtab[HASHTAB_SIZE];
 
int hashtab_hash(char *key){
 
int h = 0;
char *p;
 
for (p=key; p!='\0'; p++){
 
    h=h * HASHTAB_MUL + (int)*p;
}
return h % HASHTAB_SIZE;
}
 
 
void hashtab_init(struct listnode **hashtab){
    int i;
    for (i=0; i < HASHTAB_SIZE; i++){
        hashtab[i] = NULL;
    }
}
 
void hashtab_add(struct listnode **hashtab, char *key, int value){
    
    struct listnode *node;
 
    int index = hashtab_hash(key);
    node = malloc(sizeof(*node));
    if (node != NULL) {
    node->key = key;
    node->value = value;
    node->next = hashtab[index];
    hashtab[index] = node;
    }
}
 
 
 
struct listnode *hashtab_lookup(struct listnode **hashtab, char *key){
int index;
struct listnode *node;
 
index = hashtab_hash(key);
for (node = hashtab[index]; node != NULL; node = node->next){
 
    if (strcmp(node->key, key)==0){
    return node;
    }
 
 
}
return NULL;
}
 
 
 
 
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 
 
struct listnode *node;
hashtab_init(hashtab);
hashtab_add(hashtab, "Tigr", 190);
hashtab_add(hashtab, "Slon", 2300);
hashtab_add(hashtab, "Volk", 60);
 
node = hashtab_lookup(hashtab, "Slon");
printf("Node: %s, %d\n", node->key, node->value);
 
 
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2017, 17:19
Ответы с готовыми решениями:

Построение таблиц идентификаторов (хеш-функции, рехеширование)
построить таблицу идентификаторов методом хэш-функции, использование метода рехеширования.

Использование хеш таблиц
Помогите пожалуйста. Нужно создать телефонный справочник (по фамилии и/или имени и/или отчеству...

Организация таблиц идентификаторов
Народ , всем привет. Помогите написать код на С# или на С++ Организация таблиц идентификаторов...

Правильная организация таблиц
Всем доброго времени суток. Столкнулся с проблемкой при организации таблиц. Ситуация такая: Есть...

7
41 / 10 / 10
Регистрация: 30.10.2016
Сообщений: 21
02.05.2017, 17:22 2
Где конкретно выдает ошибку?
0
0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 49
02.05.2017, 17:23  [ТС] 3
error C2440: =: невозможно преобразовать 'void *' в 'listnode *'

Добавлено через 39 секунд
C++
1
node = malloc(sizeof(*node));
тут ему что то не нравиться
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
02.05.2017, 17:25 4
Цитата Сообщение от quazarija Посмотреть сообщение
компилятор выдает ошибку
Потому что код написан для С, не С++. Компилируйте сишным компилятором и будет вам счастье.
0
41 / 10 / 10
Регистрация: 30.10.2016
Сообщений: 21
02.05.2017, 17:28 5
Можно же просто
C++
1
node = new listnode();
0
0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 49
02.05.2017, 17:32  [ТС] 6
Прикрепил скрин с ошибкой
Миниатюры
Организация хеш-таблиц  
0
41 / 10 / 10
Регистрация: 30.10.2016
Сообщений: 21
02.05.2017, 17:41 7
Лучший ответ Сообщение было отмечено quazarija как решение

Решение

Немного переделал ваш код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define HASHTAB_SIZE 71
#define HASHTAB_MUL 31
 
class listnode {
public:
    char *key;
    int value;
    listnode *next;
};
 
listnode *hashtab[HASHTAB_SIZE];
 
int hashtab_hash(char *key)
{
    int h = 0;
 
    for (char *p=key; *p!='\0'; p++)
    {
        h = h * HASHTAB_MUL + (int)*p;
    }
    return h % HASHTAB_SIZE;
}
 
 
void hashtab_init(listnode **hashtab){
    int i;
    for (i=0; i < HASHTAB_SIZE; i++)
    {
        hashtab[i] = NULL;
    }
}
 
void hashtab_add(listnode **hashtab, char *key, int value)
{
    listnode *node;
 
    int index = hashtab_hash(key);
    node = new listnode();
    if (node != NULL)
    {
        node->key = key;
        node->value = value;
        node->next = hashtab[index];
        hashtab[index] = node;
    }
}
 
 
 
listnode *hashtab_lookup(struct listnode **hashtab, char *key)
{
    int index;
    listnode *node;
 
    index = hashtab_hash(key);
 
    for (node = hashtab[index]; node != NULL; node = node->next)
    {
        if (strcmp(node->key, key)==0)
            return node;
    }
    return NULL;
}
 
int main(int argc, char* argv[])
{
    struct listnode *node;
    hashtab_init(hashtab);
    hashtab_add(hashtab, "Tigr", 190);
    hashtab_add(hashtab, "Slon", 2300);
    hashtab_add(hashtab, "Volk", 60);
 
    node = hashtab_lookup(hashtab, "Slon");
    printf("Node: %s, %d\n", node->key, node->value);
 
    return 0;
}
Проблема была в строке
C++
1
for (char *p=key; p!='\0'; p++)
0
0 / 0 / 0
Регистрация: 21.02.2016
Сообщений: 49
02.05.2017, 17:45  [ТС] 8
Cпасибо огромное
0
02.05.2017, 17:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2017, 17:45
Помогаю со студенческими работами здесь

Организация таблиц в БД, для тестов
Прошу вас помочь организовать БД на ms sql, когда-то давно пользовался этим инструментом, но...

Правильная организация связанных таблиц
у меня есть 2 таблицы &quot;новости&quot; и &quot;категория&quot;, которые должны быть связаны. так вот я сначала...

Организация скрытия/отображения таблиц (объектов) в Word
Коллеги! Помогите с задачей. Нужно организовать скрытие и отображение таблиц, путем выбора...

Организация создания новых связанных таблиц внутри MS Access
Здраствуйте! Добрые люди подскажите пожалуйста как решить такую проблемку: Создал програмульку с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru