Pagini recente » Cod sursa (job #241743) | Cod sursa (job #2316131) | Cod sursa (job #1870187) | Cod sursa (job #2297468) | Cod sursa (job #2292918)
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
const int p = 1000003;
struct Nod {
Nod *next;
int info;
};
Nod** alocare()
{
Nod **v;
v = (Nod**) calloc( p, sizeof(Nod*));
return v;
}
int h ( int x)
{
return x%p;
}
void inserare ( Nod** v, int x )
{
Nod *prim ;
int poz = h(x);
for(prim = v[poz]; prim != NULL; prim = prim->next)
{
if ( prim ->info == x)
return;
}
Nod *aux = new Nod;
aux->next = NULL;
aux->info = x;
if( v[poz] == NULL )
v[poz] = aux;
else{
aux->next = v[poz] ->next;
v[poz]->next = aux;
}
}
void stergere ( Nod** v, int x)
{
Nod * prim , *pprim;
int poz = h(x);
prim = v[poz];
if( prim == NULL)
return;
if( prim->info == x)
{
v[poz] = prim->next;
delete prim;
return ;
}
for(prim = v[poz] ; prim->next != NULL; prim = prim->next)
{
if ( prim ->next->info == x)
{
pprim = prim->next;
prim ->next = prim->next->next;
delete pprim;
return ;
}
}
}
bool cautare( Nod** v, int x)
{
Nod * prim ;
int poz = h(x);
for(prim = v[poz]; prim != NULL; prim = prim->next)
{
if ( prim ->info == x)
return true;
}
return false;
}
void dealloc ( Nod*** v)
{
for ( int i = 0; i < p; i++)
{
Nod* prim = *(*v+i);
for(; prim != NULL;)
{
Nod* aux = prim;
prim = prim->next;
delete aux;
}
}
delete *v;
}
int main()
{
ifstream in ("hashuri.in");
ofstream out ("hashuri.out");
Nod **v;
int n , op, x, i;
v = alocare ();
in >> n;
for ( i = 0 ;i < n; i++)
{
in >> op >> x;
if( op == 1)
inserare (v, x);
else{
if ( op == 2 )
stergere(v,x);
else out <<cautare(v,x) << "\n";
}
}
dealloc (&v);
in.close();
out.close();
return 0;
}