Добавил:
Hist
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программы c++ (сортировка, хэширование) / 3 / lab3
.3.cpp# include <iostream>
# include <stdio.h>
# include <string.h>
# include <math.h>
using namespace std;
int n,i,j,m,sr,r,t,de,de1,number;
int key[60];
char x[10],z[10],a[10],b[10];
char hesh[25][10];
int output(void)
{
cout<<"Hash table:\n";
cout<<"_________________________\n";
for(j=0; j<21; j++)
cout<<"| "<<j<<" | "<<hesh[j]<<"\n";
cout<<"_________________________\n";
}
int add(void)
{
cout << "Vvedite element: ";
cin>>z;
cout << "\n_________________\n";
de=0;
for (j=0; j<10; j++) de=de+z[j];
cout <<"Key="<<de<<"\n";
de=de*de;
cout <<"Key^2="<<de<<"\n";
i=0;
de1=de;
do
{
de=de/10;
i=i+1;
}
while (de!=0);
i=i/2;
sr=de1/pow(10,i+1);
sr=de1/pow(10,i-1)-sr*100;
n=0;
while (n!=2)
{
t=sr%(20-n);
cout <<"Hash adress"<<n+1<<"="<<t<<"\n";
if (strcmp(hesh[t],z)==0)
{
cout << "This key can't be used\n";
return 0;
}
if (strcmp(hesh[t],"")==0)
{
strcpy(hesh[t],z);
number=number+1;
cout << "Free space\n";
return 0;
}
n=n+1;
}
cout << "Search free space LNP\n";
r=1;
do
{
if (strcmp(hesh[t],z)==0)
{
cout << "This key can't be used!!!\n";
return 0;
}
if (t<20)
{
t=t+1;
r=strcmp(hesh[t],"");
}
else
t=-1;
}
while (r!=0);
strcpy(hesh[t],z);
cout <<"Final hash="<<t<<"\n";
number=number+1;
}
int del(void)
{
cout << "Vvedite element: ";
cin>>z;
cout << "\n_________________\n";
de=0;
for (j=0; j<10; j++) de=de+z[j];
de=de*de;
i=0;
de1=de;
do
{
de=de/10;
i=i+1;
}
while (de!=0);
i=i/2;
sr=de1/pow(10,i+1);
sr=de1/pow(10,i-1)-sr*100;
n=0;
while (n!=2)
{
t=sr%(20-n);
if (strcmp(hesh[t],z)==0)
{
strcpy(hesh[t],"");
number=number-1;
cout << "Key delete\n";
return 0;
}
else cout <<"Hash adress "<<n+1<<"="<<t<<" not found\n";
n=n+1;
}
r=1;
i=0;
do
{
if (t<20)
{
i=i+1;
t=t+1;
r=strcmp(hesh[t],z);
}
else
t=-1;
if (i>20)
{
cout << "There is no that key in hash\n";
return 0;
}
}
while (r!=0);
strcpy(hesh[t],"");
cout << "Search key LNP and delete\n";
number=number-1;
}
int main(void)
{
int menu=0;
n=20;
number=0;
while(menu<5)
{
cout<<"MENU:\n";
cout<<"<1>-Add key\n";
cout<<"<2>-Delete key\n";
cout<<"<3>-Exir\n";
cout<<"Operation: ";
cin>>menu;
switch(menu)
{
case 1:{
if (number>19)
{
cout<<"Table full\n";
break;
}
else
{
add();
output();
break;
}
}
case 2:{del();output();break;}
case 3:{return 0;}
}
}
return 0;
}
Соседние файлы в папке 3