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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2019, 14:37   #1
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию ХЕШ таблица методом цепочек

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

ADD('abc')
ADD('abs') <-- тут возникает какая то ошибка


Код:

const
      m = 3;
type
      l = ^p;

      p = record
            k : string;
            n : l;
          end;

var
    a : array [0..m-1] of l;
    j : integer;

procedure Init;
var i : integer;
begin
for i :=0 to m-1 do a[i] := nil;
end;

function H(k : string) : integer; begin Result := ord(k[1]) mod 97; end;

function S(k : string) : l;
var i : integer; p : l;
begin
i := H(k);  p := a[i];
while p <> nil do
                  begin
                    if p^.k = k then
                                    begin
                                      S := p;
                                      exit;
                                    end;
                  p := p^.n;
                  end;
S := p;          
end;

function ADD(k : string) : boolean;
var i : integer; t, f : l;
begin
   i := H(k);
   t := S(k);
   if t = nil then
                  begin
                      new(f);
                      f.k := k;
                      f.n := nil;
                      writeln(i);
                      readln;
                      if a[i] = nil then a[i] := f
                      else t.n := f;
                  end;

end;

begin
 Init;
 ADD('abc');
 ADD('abs');
 ADD('bcd');
 ADD('cde');

 for j := 0 to m-1 do
 writeln(a[j].k);
 readln;

end.
goto ∞ вне форума Ответить с цитированием
Старый 30.11.2019, 18:31   #2
weatherbad
Заблокирован
 
Регистрация: 29.11.2019
Сообщений: 5
По умолчанию

Код:
i := H(k);  p := a[i];
Лихо. В i число от 0 до 96, а размерность массива [0..2]. Нужно было еще все переменные и функции обозвать i1,i2,i3 и т.д. чтобы код полностью не читабельным стал
weatherbad вне форума Ответить с цитированием
Старый 30.11.2019, 20:49   #3
goto ∞
Форумчанин
 
Аватар для goto ∞
 
Регистрация: 21.12.2010
Сообщений: 155
По умолчанию

Цитата:
Сообщение от weatherbad Посмотреть сообщение
Код:
i := H(k);  p := a[i];
Лихо. В i число от 0 до 96, а размерность массива [0..2]. Нужно было еще все переменные и функции обозвать i1,i2,i3 и т.д. чтобы код полностью не читабельным стал
Размер массива специально сделал так что бы проверить быстро добавляется ли данные в список в массив индексом [0]

Ошибка где то в функции поиска S() заданного ключа k, идея таково что если элемент с таким ключом не найден в списке то он должен возвращать переменную ссылку p который ссылается на nil что бы в дальнейшем в функции добавления ADD() сделать t := <данные> (else t.n := f Но я знаю что она не правильная поэтому и решил спросить.
goto ∞ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хеш-таблица, метод цепочек, первичный индекс и вторичный индекс - C# AnatoliyAnatoliy Помощь студентам 2 09.01.2018 15:30
Разрешение коллизий хэш-таблицы методом цепочек Stirlingite Помощь студентам 0 16.09.2013 00:52
Хэш-таблица. Метод цепочек. C++ Playa-RC Помощь студентам 0 10.03.2012 15:07
разница между разрешением коллизий: методом внешних и внутренних цепочек Sofiko Помощь студентам 1 24.06.2011 07:21
Хеш-таблица. Непонятно с решением коллизии методом перемешивания внутренними цепочками Познающий Помощь студентам 9 05.12.2009 02:48