Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 17:27   #1
Olya13254
Новичок
Джуниор
 
Регистрация: 29.11.2010
Сообщений: 1
Восклицание хэш-таблица с открытой адресацией

Задание: реализовать динамическую хеш-таблицу с открытой адресацией для хранения строк (операции вставки и поиска). Таблица должна увеличивать свой размер вдвое при достижении 50% заполнения.
Проблема заключается в том, что возникает отрицательная длина строки, не могу понять как исправить код, чтобы программа заработала. Помогите, пожалуйста, очень важно.

#include "stdafx.h"
#include "string.h"
#include "iostream"
#include "conio.h"
#include "locale.h"

using namespace std;

int m=6;
const int a=127;
int c1=5, c2=3, g=0;
char** H;
char k[];

int h1(char s[],int n)
{
if (n>0) return ((a*h1(s, n-1))+s[n-1])%m;
else return 0;
};

int h(char k[], int i, int n)
{
if(i<(m-1)) return ((h1(k, n)+c1*i+c2*i*i)%m);
else return 0;
};

int Hash_Insert(char** H, char k[]) //вставка элемента
{

int i=0; //номер иследования

do
{ int n = strlen(k);

int j=h(k, i, n);
{

if(H[j]!=NULL)
{

H[j]=k;
cout << j << endl;
g++;
cout << " количество элементов в таблице" << endl;
printf(" %d\n", g);
if(g==m/2 && H[j]!=0)
{
char** u = new char* [2*m];
cout << "увелечение хэш таблицы в двое:\n" << endl;
g=0;
for(int y=0; y<m; y++)
{

if(H[y]!=NULL)
{
Hash_Insert(u, H[y]);
cout << k << endl;

g++;
printf(" %d\n", g);
}
m *=2;
}
delete [] u ;
}
return j;
}
else i++;
}
}
while(i!=m);
return NULL;
};

int Hash_Search(char** H, char k[])// поиск элемента
{
int i=0;
int j=0;
do
{
int n = strlen(k);
j=h(k, i, n);
if(H[j]!=0 && strcmp(H[j],k) == 0)
{
cout<<" "<< endl;
cout << j << endl;
return j;
}
else i++;
}
while(H[j]!=NULL && i!=m);
return -1;
};

int _tmain()
{
setlocale (LC_ALL, "Russian");
char** H = new char* [m];
int n;
for ( int i=0; i<m; i++)
{
H[i]=new char [m];
}
char a[]="asy";
int r=h1(a, 3);
cout << "Вывод h1:" << endl;
printf("%d\n",r); // вывод h1
int e=h("asy", 0, 3);
cout << "Вывод h:" << endl;
printf("%d\n", e);

cout << "Вывод вставки asy:" << endl;
Hash_Insert(H, "asy");
cout << "Вывод вставки asyp:" << endl;
Hash_Insert(H, "asyp");
cout << "Вывод вставки asyt:" << endl;
Hash_Insert(H, "asyt");
cout << "Вывод вставки asyp:" << endl;
Hash_Insert(H, "asyp");

cout << "\nВывод поиска asyt:" << endl;
Hash_Search(H, "asyt");

_getch();
return 0;
}
Olya13254 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с многоуровневой адресацией grook Общие вопросы C/C++ 3 18.12.2010 17:15
хэш-функция N-хэш Temka Общие вопросы Delphi 1 29.11.2010 21:11
запуталась с адресацией диапазонов на листе samoa Microsoft Office Excel 14 09.11.2010 23:27
Снова торможу с адресацией... tae1980 Microsoft Office Excel 18 28.03.2010 21:05
Помогите с адресацией листа в формуле ABCOz Microsoft Office Excel 2 09.09.2009 13:38