// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП
//
// listhash.cpp - Copyright (c) Гергель В.П. 16.09.2000, 19.01.2003
//
// Таблицы с вычислимым входом - Метод цепочек

#include "listhash.h"

TListHash :: TListHash (int Size) : THashTable() {
  pList = new PTDatList[Size]; TabSize=Size; CurrList=0;
  for ( int i=0; i<TabSize; i++ ) pList[i] = new TDatList;
}              /*---------------------------------------------*/

TListHash :: ~TListHash() {
  for ( int i=0; i<TabSize; i++ ) delete pList[i];
  delete [] pList;
}              /*---------------------------------------------*/

int TListHash :: IsFull() const { // таблица заполнена ?
  PTDatLink pLink = new TDatLink();
  int temp = (pLink == NULL);
  delete pLink;
  return temp;
}              /*---------------------------------------------*/

PTDatValue TListHash :: FindRecord ( TKey k ) { // найти запись
 PTDatValue pValue = NULL;
 CurrList = HashFunc(k) % TabSize;   // функция расстановки
 PTDatList pL = pList[CurrList]; Efficiency=0;
 for ( pL->Reset(); !pL->IsListEnded(); pL->GoNext() ) // поиск по списку
  if (PTTabRecord(pL->GetDatValue())->Key == k)
    { pValue = PTTabRecord(pL->GetDatValue())->pValue; break; }
 Efficiency = pL->GetCurrentPos()+1; // номер тек. поз. = к-ву итераций поиска
 if ( pValue == NULL ) SetRetCode(TabNoRec); else SetRetCode(TabOK);
 return pValue;
}              /*---------------------------------------------*/

void TListHash :: InsRecord  ( TKey k, PTDatValue pVal ) { // вставить запись

Skipped...

}              /*---------------------------------------------*/

void TListHash :: DelRecord ( TKey k ) { // удалить запись
  PTDatValue temp = FindRecord(k);          // поиск в таблице

Skipped...

}              /*---------------------------------------------*/

// навигация
int TListHash :: Reset ( void ) { // установить на первую запись
  CurrList = 0;
  pList[CurrList]->Reset();
  return IsTabEnded();
}              /*---------------------------------------------*/

int TListHash :: IsTabEnded ( void ) const { // таблица завершена ?
  return CurrList >= TabSize;
}              /*---------------------------------------------*/

int TListHash :: GoNext ( void ) { // переход к следующей записи

Skipped...

}              /*---------------------------------------------*/

// доступ
TKey TListHash :: GetKey( void ) const { // значение ключа текущей записи
  if ( (CurrList<0) || (CurrList>=TabSize) ) return string("");
  PTTabRecord pRec = PTTabRecord(pList[CurrList]->GetDatValue());
  return (pRec==NULL ) ? string("") : pRec->Key;
}              /*---------------------------------------------*/

PTDatValue TListHash :: GetValuePtr( void ) const { // указатель на значение
  if ( (CurrList<0) || (CurrList>=TabSize) ) return NULL;
  PTTabRecord pRec = PTTabRecord(pList[CurrList]->GetDatValue());
  return (pRec==NULL ) ? NULL : pRec->pValue;
}              /*---------------------------------------------*/
Хостинг от uCoz