Хеширование_5_вариант
.docxБелорусский государственный университет
информатики и радиоэлектроники
Кафедра экономический информатики
Основы алгоритмизации и программирования
Хеширование
Вариант 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)консоль