Добавил:
rushevamar@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хеширование_5_вариант

.docx
Скачиваний:
9
Добавлен:
09.09.2020
Размер:
45.53 Кб
Скачать

Белорусский государственный университет

информатики и радиоэлектроники

Кафедра экономический информатики

Основы алгоритмизации и программирования

Хеширование

Вариант 5

Студент Рушева М.В.

Группа 972304

Минск,2020

1)задание

Создать хеш-таблицу со случайными целыми ключами и найти запись с максимальным ключом.

2)код

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>;

typedef struct {

int* hashTable;

int* used;

}HashTab;

void Init_Table(HashTab* T, int Size);

void Free_Table(HashTab* T);

int hashF(int v, int Size);

int ReHash(int idx, int i, int Size);

int Add(HashTab* T, int n, int Size);

void print_Table(HashTab T, int Size);

int find_key_value(HashTab T, int Size, int* key, int* value);

int main()

{

SetConsoleOutputCP(1251);

SetConsoleCP(1251);

int i, Size = 20;

HashTab T;

int key, value;

srand(time(NULL));

Init_Table(&T, Size);

printf("Случайные значения: ");

for (i = 0; i < Size - rand() % 10; i++) {

value = rand() % (Size + 20);

printf("%d ", value);

Add(&T, value, Size);

}

printf("\nХеш-таблица\n");

print_Table(T, Size);

if (find_key_value(T, Size, &key, &value)) {

printf("\nЗапись с максимальным ключом:");

printf("ключ=%d\tзначение=%d\n", key, value);

}

else {

printf("\nТаблица пуста!\n");

}

Free_Table(&T);

return 0;

}

int find_key_value(HashTab T, int Size, int* key, int* value) {

int i;

for (i = Size - 1; i >= 0; i--) {

if (T.used[i]) {

*key = i;

*value = T.hashTable[i];

return 1;

}

}

return 0;

}

void print_Table(HashTab T, int Size) {

int i;

printf("|%8s|%8s|\n", "Ключ", "Значение");

for (i = 0; i < Size; i++) {

if (T.used[i]) {

printf("|%8d|%8d|\n", i, T.hashTable[i]);

}

else

printf("|%8s|%8s|\n", "Null", "Null");

}

}

void Free_Table(HashTab* T) {

free((*T).used);

free((*T).hashTable);

}

int Add(HashTab* T, int n, int Size) {

int index = hashF(n, Size);

int i = 0;

int Count = 0;

while (i <= Size - 1 && (*T).used[index] && (*T).hashTable[index] != n) {

index = ReHash(index, i, Size);

i++;

Count++;

}

if (!(*T).used[index]) {

(*T).used[index] = 1;

(*T).hashTable[index] = n;

}

return Count;

}

void Init_Table(HashTab* T, int Size) {

int i;

(*T).hashTable = malloc(sizeof(int) * Size);

(*T).used = malloc(sizeof(int) * Size);

for (i = 0; i < Size; i++) {

(*T).hashTable[i] = 0;

(*T).used[i] = 0;

}

}

int hashF(int v, int Size) {

return v % Size;

}

int ReHash(int idx, int i, int Size) {

return ((hashF(idx, Size) + i) % Size);

}

3)консоль