Прямий доступ та хешування. Організація даних у вигляді таблиць прямого доступу та хешованих таблиць, страница 2

ВИХІДНІ МОДУЛІ.

            1). Файл із прізвищами

Pihtin .

Gavruk

Kovalenko

Popa

Semenuk

Kosenko

Yankovoy

Petrov

Ponomarenko

Panteleymonov

Sidorov

Lyashenko

Konashevich

Storogenko

Storogenko

Panin

Maslov

Ivanov

Ermolenko

Kolugniy

2). ФАЙЛ ІЗ ОПИСОМ ФУНКЦІЙ.

  #define RAZM 10                           // Розмір хеш-таблиці

            struct Stud

            {          char name[20];           //Прізвище студента

                        Stud *next;                 // Покажчик на наступне прізвище

                        Stud *prev;                             // Покажчик на попереднє прізвище

                        Stud *beg;                   // Покажчик на початок списку

                        Stud *curr;                  //Покажчик на поточне прізвище

            };

            Stud *st;

            Stud *p[RAZM];                                //Хеш-таблиця

   int Build(int position,char *str);     // Створення елемента списку для даного прізвища str

   void Del();                                        // Видалення прізвища зі списку  

            void First();                            //  Ініціалізація хеш-таблиці

            void Insert();                           // Вставки прізвища в хеш-таблицю

            int Kesh(char *str);                // Розподіл прізвищ по списках

            void Show();                           // Видача списків на екран

            void Search();                         // Пошук прізвища в списку           

            void Death();                          // Знищення списків

            void Menu();                          // Видача меню

            void Update_File();                // Перезапис вхідного файлу відповідно до змін

3). ГОЛОВНИЙ МОДУЛЬ.

/* Відкривається файл; для кожного прізвища обчислюється позиція в хешованому списку, записується в список, видається результат на екран і перехід до меню. */

#include <iostream.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

#include <string.h>

#include "func.h"

#include "do.cpp"

void main(void)

            {            FILE *f;

                          char *string="\0";

                          int pos=0;

                          clrscr();

                          First();

                          if((f=fopen("kesh.txt","rt"))==NULL)

                        {             cout<<"Error reading input file\n";

                                       getch();

                                       exit(1);

                         }

                                      while(!feof(f))

                                      {                    fgets(string,20,f);

                                                             if(string[strlen(string)-1]=='\n')

                                                             string[strlen(string)-1]='\0';

                                                             pos=Kesh(string);

                                                             Build(pos,string);

                                      }

                                     fclose(f);

                                     Show();

                                     Menu();

                                     Death();

                                     getch();

                        }

4). МОДУЛЬ, що містить функції для реалізації усіх вищевказаних дій.

int Kesh(char *str)

            {          int i,kesh=0,size=0;

                         for(i=0;i<(strlen(str)-2);i++)            

                           size+=(int)str[i];                              //підсумовуємо всі коди рядка

                           kesh=size%RAZM;                         //Значення хэш-функции

                         return kesh;

                        }

void First()

            {          for(int i=0;i<RAZM;i++)

                        p[i]=NULL;                // ініціалізація масиву покажчиків на списки

            }

            int Build(int position, char *str)

            {          Stud *pt,*nw,*nxt;

                         int kol=0;

                          pt=new Stud;

                          if(!pt)

                         {         cout<<"Error"<<endl;

                                    getch();

                                    exit(1);