Pagini recente » Cod sursa (job #1814659) | Cod sursa (job #2333482) | Cod sursa (job #1655250) | Cod sursa (job #2549665) | Cod sursa (job #1045507)
#include <fstream>
using namespace std;
const int dim_hash = 1000003;
typedef struct _El
{
int data;
_El *urm;
}El;
bool HTinsert( int data);
bool HTsearch(int data);
bool HTdeleteData( int data);
void HTdeleteHash();
El* HT[1000003];
int main()
{
int nr;
int op, x;
ifstream in("hashuri.in");
ofstream out("hashuri.out");
in >> nr;
for (int i = 0; i < nr; ++i)
{
in >> op >> x;
if (op == 1)
HTinsert( x);
else
if (op == 2)
{
HTdeleteData( x);
}
else
{
if (HTsearch( x))
out << 1 << '\n';
else
out << 0 << '\n';
}
}
in.close();
out.close();
return 0;
}
bool HTinsert( 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( 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(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()
{
for (int i = 0; i < dim_hash; ++i)
while (HT[i])
{
El *toDel = HT[i];
HT[i] = toDel->urm;
delete toDel;
}
}