Pagini recente » Cod sursa (job #2601237) | Cod sursa (job #1622230) | Cod sursa (job #621667) | Cod sursa (job #3038404) | Cod sursa (job #1045479)
#include <fstream>
using namespace std;
#pragma once
const int dim_hash = 666013;
typedef struct _El
{
int data;
_El *urm;
}El;
void HTinit(El *HT[]);
bool HTinsert(El *HT[], int data);
bool HTsearch(El *HT[], int data);
bool HTdeleteData(El *HT[], int data);
void HTdeleteHash(El *HT[]);
//void HTafisare(El *HT[]);
int main()
{
int nr;
int op, x;
El **HT = nullptr;
ifstream in("hashuri.in");
ofstream out("hashuri.out");
in >> nr;
HT = new El*[dim_hash];
HTinit(HT);
for (int i = 0; i < nr; ++i)
{
in >> op >> x;
if (op == 1)
HTinsert(HT, x);
else
if (op == 2)
{
HTdeleteData(HT, x);
}
else
{
if (HTsearch(HT, x))
out << 1 << '\n';
else
out << 0 << '\n';
}
}
in.close();
out.close();
return 0;
}
void HTinit(El *HT[])
{
for (int i = 0; i < dim_hash; HT[i++] = NULL);
}
bool HTinsert(El *HT[], int data)
{
int key = data % dim_hash;
El *p = HT[key];
while (p)
{
if (p->data == data)
break;
p = p->urm;
}
if (p) //inseamna ca exista deja in hash
return false;
else
{
El *toInsert = new El;
toInsert->data = data;
toInsert->urm = HT[key];
HT[key] = toInsert;
return true;
}
}
bool HTsearch(El *HT[], int data)
{
int key = data % dim_hash;
El *p = HT[key];
while (p)
{
if (p->data == data)
return true;
p = p->urm;
}
return false;
}
bool HTdeleteData(El *HT[], int data)
{
int key = data % dim_hash;
El *p = HT[key];
El *toDel = HT[key];
if (HT[key] == NULL)
return false;
if ( HT[key]->data == data ) //daca e primul din lista
{
toDel = HT[key];
HT[key] = toDel->urm;
delete toDel;
return true;
}
while (p->urm)
{
if (p->urm->data == data)
break;
p = p->urm;
}
if (!p->urm)
return false;
else
{
toDel = p->urm;
p->urm = toDel->urm;
delete toDel;
return true;
}
}
void HTdeleteHash(El *HT[])
{
for (int i = 0; i < dim_hash; ++i)
while (HT[i])
{
El *toDel = HT[i];
HT[i] = toDel->urm;
delete toDel;
}
}
//void HTafisare(El *HT[])
//{
// for (int i = 0; i < dim_hash; ++i)
// {
// El *p = HT[i];
//
// if (p)
// {
// cout << "Inregistrari avand codul de dispersie " << i << " : ";
// while (p)
// {
// cout << p->data << " ";
// p = p->urm;
// }
// cout << '\n';
// }
// }
//}