Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Хешування

Автор:   •  Сентябрь 11, 2019  •  Лабораторная работа  •  1,374 Слов (6 Страниц)  •  285 Просмотры

Страница 1 из 6

Тернопільський національний технічний університет імені Івана Пулюя

Факультет комп’ютерно-інформаційних систем та програмної інженерії

Кафедра програмної інженерії

ЗВІТ

До лабораторної роботи №4

 Хешування

з навчальної дисципліни <<Алгоритми та структури даних >>

Підготував:

Студент

групи СП-12

Мінько Віталій

Тернопіль 2017

Мета роботиабути практичних навичок по реалізації хеш-таблиць з відкритим хешуванням

Короткі теоретичні відомості : 

Хеш-таблиця являє собою узагальнення звичайного масиву. Вона використовується тоді , коли не зручно використовувати масив.

h()- хеш-функція.

Кажуть, що елемент з ключем k хешується в комірку h(k).

Величина h(k) називається хеш-значенням ключа k.

Елементи хеш-таблиці ще називаються сегментами хеш-таблиці.

Хеш-таблиці бувають: -Відкриті,-Закриті.

Функції хеш-таблиць :

MAKENULL - створення хеш-таблиці
MEMBER - перевірка на наявність елемента в хеш-таблиці
INSERT - вставка елемента в таблицю
DELETE - видалення елеманта з таблиці
PRINT  - друк таблиці

Завдання : Реалізувати функції для робот из хеш-таблицею на основі методу відкритого хешування. В якості елементів хеш-таблиці вибрати стрічки (масив символів).

typedef char nametype[20];

struct celltype {

    nametype element;

    celltype* next;

};

const int DICT_SIZE = 5;

typedef celltype* DICTIONARY[DICT_SIZE];

//хеш-функція

int hash (nametype x) {

    int sum = 0;

     for (unsigned int i = 0; i < strlen(x); i++)

         sum += (int) x[i];

 

    return sum % (DICT_SIZE) ;

}

MAKENULL

void MAKENULL (DICTIONARY A){

for(int i=0;i

                A[i]=NULL;

}

MEMBER

bool MEMBER (nametype x,DICTIONARY A){

        celltype* current;

        current=A[hash(x)];

        

        while(current !=NULL){

                if(current->element == x)

                        return true;

                else

                        current=current->next;

                        return false;

        }

}
INSERT

void INSERT(nametype x,DICTIONARY A){

        int bucket;

        celltype* oldheader;

        

        if(MEMBER(x,A)==false){

                bucket=hash(x);

                oldheader=A[bucket];

                new A[bucket];

                A[bucket]element=x;

                A[bucket]->next=oldheader;

...

Скачать:   txt (5.5 Kb)   pdf (313.6 Kb)   docx (12.5 Kb)  
Продолжить читать еще 5 страниц(ы) »
Доступно только на Essays.club