Pagini recente » Cod sursa (job #1664935) | Cod sursa (job #1642419) | Cod sursa (job #2041070) | Cod sursa (job #2334608) | Cod sursa (job #969599)
Cod sursa(job #969599)
#include <cstdio>
#include <cstdlib>
#define N 666013
struct node
{
long val;
node* next;
};
struct hashtable
{
node* T[N];
};
void init(hashtable &H)
{
for (long i=0;i<N;i++)
H.T[i] = NULL;
}
int find(hashtable H, long x)
{
long code = x % N;
if (H.T[code] == NULL)
return 0;
else
{
node* p = H.T[code];
while (p != NULL && p->val != x)
p = p->next;
if (p->val == x)
return 1;
else
return 0;
}
}
void add(hashtable &H, long x)
{
if (find(H,x) == 1)
return;
else
{
node* aux = new node;
aux->val = x;
aux->next = H.T[x%N];
H.T[x%N] = aux;
}
}
void del(hashtable &H, long x)
{
if (H.T[x%N] == NULL)
return;
else
{
if (H.T[x%N]->val == x)
{
node* aux = H.T[x%N];
H.T[x%N] = H.T[x%N]->next;
free(aux);
}
else
{
node* p = H.T[x%N];
while (p != NULL && p->next->val != x)
p = p->next;
if (p == NULL)
return;
else
{
node* aux = p->next;
p = p->next->next;
free(aux);
}
}
}
}
int main()
{
long n = 0;
int op = -1;
long val = 0;
hashtable H;
init(H);
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%ld",&n);
for (long i=0;i<n;i++)
{
scanf("%d%ld",&op,&val);
switch(op)
{
case 1: add(H,val);break;
case 2: del(H,val);break;
case 3: printf("%d\n",find(H,val));break;
default:break;
}
}
return 0;
}