Объектно-ориентированное программирование на C++. Андрианова А.А - 180 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
Для хранения телефонной книги будем использовать хэш-таблицу из
26 групп (по количеству букв латинского алфавита). Ключевым
значением поиска будет являться имя абонента. Хэш-функция будет
определять номер группы по первой букве этого имени.
Данная хэш-функция является простой, однако она не обеспечивает
равномерного распределения информации по группам: некоторые буквы
гораздо чаще встречаются в именах, чем другие.
При реализации хэш-таблицы хранение каждой группы будем
осуществлять в виде односвязного списка, а сама хэш-таблица будет
представлять собой массив этих списков. Таким образом, приложение
«Телефонная книга» содержит четыре класса:
класс информации об абоненте (Info);
класс одного элемента списка (Element);
класс списка для хранения группы хэш-таблицы (List);
класс для хранения хэш-таблицы (HashTable).
Приведем объявления этих классов:
// предварительное объявление классов
class List;
class HashTable;
// класс информации об абоненте
class Info
{
private:
char fio[50]; // имя абонента
char phone[20]; // номер телефона
public:
// конструктор с инициализацией данных об абоненте
Info(char*, char*);
// конструктор по умолчанию
Info();
// конструктор копирования
Info(const Info&);
// методы получения и установки имени абонента
char* GetFIO();
void SetFIO(char*);
// методы получения и установки номера телефона
char* GetPhone();
void SetPhone(char*);
// дружественные классы и функции
friend class List;
friend ostream& operator << (ostream&, Info&);
friend ostream& operator << (ostream&, List&);
180
                                Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
    Для хранения телефонной книги будем использовать хэш-таблицу из
26 групп (по количеству букв латинского алфавита). Ключевым
значением поиска будет являться имя абонента. Хэш-функция будет
определять номер группы по первой букве этого имени.
    Данная хэш-функция является простой, однако она не обеспечивает
равномерного распределения информации по группам: некоторые буквы
гораздо чаще встречаются в именах, чем другие.
    При реализации хэш-таблицы хранение каждой группы будем
осуществлять в виде односвязного списка, а сама хэш-таблица будет
представлять собой массив этих списков. Таким образом, приложение
«Телефонная книга» содержит четыре класса:
      • класс информации об абоненте (Info);
      • класс одного элемента списка (Element);
      • класс списка для хранения группы хэш-таблицы (List);
      • класс для хранения хэш-таблицы (HashTable).
    Приведем объявления этих классов:

      // предварительное объявление классов
      class List;
      class HashTable;

      // класс информации об абоненте
      class Info
      {
        private:
             char fio[50];       // имя абонента
             char phone[20];   // номер телефона
        public:
             // конструктор с инициализацией данных об абоненте
             Info(char*, char*);
             // конструктор по умолчанию
             Info();
             // конструктор копирования
             Info(const Info&);
             // методы получения и установки имени абонента
             char* GetFIO();
             void SetFIO(char*);
             // методы получения и установки номера телефона
             char* GetPhone();
             void SetPhone(char*);
             // дружественные классы и функции
             friend class List;
             friend ostream& operator << (ostream&, Info&);
             friend ostream& operator << (ostream&, List&);


180