39
while (!h[adr].empty)
adr = (adr + step) % sizeTable;
//
место свободно - можно ставить эле-
мент
h[adr].empty = false; //
признак занятости
h[adr].visit = true; //
признак посещенности
h[adr].info.fio = fio;
h[adr].info.phone
=
phone;
size++; //
количество элементов увеличилось
}
return adr;
}
Для поиска элемента в хеш-таблице
используется метод FindHash,
представленный в листинге 2.20.
Листинг 2.20. Поиск элемента в хеш-таблице
public int FindHash(string phone,
out string fio, out int count) //
по-
иск в хеш-таблице
{
int result = -1;
bool ok;
fio = "";
count = 1;
ClearVisit();
int i = hashKey(phone);
ok = h[i].info.phone == phone;
while (!ok && !h[i].visit)
{
count++;
h[i].visit = true;
i = (i + step) % sizeTable; //
продолжаем по-
иск
ok = h[i].info.phone == phone;
}
16 / 23
40
if (ok)
{
result = i;
fio = h[result].info.fio;
}
return result;
}
Если
элемент найден, то
значение функции равно индексу, иначе –1.
Дополнительная информация о найденном элементе
передается параметром
fio
, параметр
count возвращает число шагов.
Функция удаления элемента – булевская.
Если элемент был найден в
таблице и, следовательно, удален, то ее значение равно
true, если элемента
в таблице не было – не было и удаления, значение функции –
false. Алго-
ритм приведен в листинге 2.21.
Do'stlaringiz bilan baham: