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

Хеширование методом открытой адресации

06.12.2015, 16:18. Показов 780. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте

Добавлено через 9 минут
Есть задание создать хеш таблицу методом цепочек и методом открытой адресации, методом цепочек я сделал, а с открытой адресацией как-то не складывается(
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include "hash.h"
#include <iostream>
#include <string>
 
using namespace std;
 
hash_::hash_()
{
    for (int i = 0; i < table_size; i++)
    {
        hashTable[i] = new item;
        hashTable[i]->name = "empty";
        hashTable[i]->surname = "empty";
        hashTable[i]->next = NULL;
    }
}
 
int hash_::hashFunc(string key)
{
    int hash = 0;
    int index;
    for (int i = 0; i < key.length(); i++)
        hash += (int)key[i];
    index = hash%table_size;
    return index;
}
 
void hash_::addItem(string name, string surname)
{
    int index = hashFunc(name);
    if (hashTable[index]->name == "empty")
    {
        hashTable[index]->name = name;
        hashTable[index]->surname = surname;
    }
    else
    {
        item* pointer = hashTable[index];
        item* n = new item;
        n->name = name;
        n->surname = surname;
        n->next = NULL;
        while (pointer->next != NULL)
        {
            pointer = pointer->next;
        }
        pointer->next = n;
    }
}
 
int hash_::NOfItInIndex(int index)
{
    int count = 0;
    if (hashTable[index]->name == "empty")return count;
    else
    {
        count++;
        item* pointer = hashTable[index];
        while (pointer->next != NULL)
        {
            count++;
            pointer = pointer->next;
        }
    }
    return count;
}
 
void hash_::showTable()
{
    int number;
    for (int i = 0; i < table_size; i++)
    {
        number = NOfItInIndex(i);
        showItInIndex(i);
        cout << "Количество объектов = " << number << endl << endl;
    }
}
 
void hash_::showItInIndex(int index)
{
    item* pointer = hashTable[index];
    if (pointer->name == "empty")
        cout << "Индекс = " << index << " пуст\n";
    else
    {
        cout << "Индекс " << index << " содержит следующие объкты\n";
        while (pointer != NULL)
        {
            cout << pointer->name<<endl;
            cout << pointer->surname<<endl;
            cout << "====================\n";
            pointer = pointer->next;
        }
    }
}
 
void hash_::foundPerson(string name)
{
    int index = hashFunc(name);
    bool found_name = false;
    string surname;
    item* pointer = hashTable[index];
    while (pointer != NULL)
    {
        if (pointer->name == name)
        {
            found_name = true;
            surname = pointer->surname;
        }
        pointer = pointer->next;
    }
    if (found_name == true)
        cout << "Найден(а), фамилия: " << surname << endl;
    else
        cout << name << " не найден(а)\n";
}
 
void hash_::removeItem(string name)
{
    int index = hashFunc(name);
    item* delete_pointer;
    item* p1;
    item* p2;
 
    if (hashTable[index]->name == "empty" && hashTable[index]->surname == "empty") 
        cout << name << " не найден(а)\n";
    
    else if (hashTable[index]->name == name && hashTable[index]->next == NULL)
    {
        hashTable[index]->name = "empty";
        hashTable[index]->surname = "empty";
    }
    else if (hashTable[index]->name == name)
    {
        delete_pointer = hashTable[index];
        hashTable[index] = hashTable[index]->next;
        delete delete_pointer;
        cout << name << " удален(а)\n";
    }
    else
    {
        p1 = hashTable[index]->next;
        p2 = hashTable[index];
        while (p1 != NULL && p1->name != name)
        {
            p2 = p1;
            p1 = p1->next;
        }
        if (p1 == NULL)
            cout << name << " не найден(а)\n";
        else
        {
            delete_pointer = p1;
            p1 = p1->next;
            p2->next = p1;
            delete delete_pointer;
            cout << name << " удален(а)\n";
        }
    }
}
Надеюсь на вашу помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2015, 16:18
Ответы с готовыми решениями:

Хеширование таблицы методом деления
Разработать процедуру хеширования массива записей методом деления, в которой предполагается частое...

Хеширование,вычисление ключа методом вычисления адреса
Всем Привет! не могу реализовать последний пункт. Если кто-то поможет,буду благодарен! Задание...

Решение коллизий методом открытой адресации(не важно C# или C++)
Посмотрите пожалуйста на код. Не могу понять в чем проблема. Алгоритм с книги Т.Кормена ( ссилка -...

(Хеширования) Разрешение коллизий при хешировании методом открытой адресации
Доброго времени суток! Программа реализует алгоритм решения коллизий методом открытой адресации....

0
06.12.2015, 16:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2015, 16:18
Помогаю со студенческими работами здесь

Решить уравнение любым методом(методом половинного деления,методом простой интеграции,методом касательных)
Решить уравнение: 0,1*x^2-x*ln(x)=0 любым методом(методом половинного деления,методом простой...

Способы адресации
Здравствуйте! Подскажите пожалуйста почему в первом случае в регистр BX записывается адрес массива...

Предел адресации
Фактически, адресация выше 40 бит для ОЗУ (это уже 1 терабайт) крайне маловероятна......

Пояснить об адресации
Я вот буквально на днях начал изучать ассемблер,дали вот такое задание Ввести смещение...


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

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

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