Pagini recente » Cod sursa (job #1397912) | Cod sursa (job #2271799) | Cod sursa (job #889166) | Cod sursa (job #2676850) | Cod sursa (job #1763396)
#include<stdio.h>
#define MOD 457867
FILE*fin = fopen("hashuri.in", "r");
FILE*fout = fopen("hashuri.out", "w");
int hash(int x) {
return x%MOD;
}
struct nod {
int val;
nod*next;
};
nod lista[MOD+1];
nod* cap[MOD+1];
void InitLista()
{
for (int i = 0; i <MOD; i++)
{
cap[i]=new nod;
cap[i]->val = NULL;
cap[i]->next = NULL;
}
}
void Adauga(int x)
{
nod* newborn = new nod;
newborn->val = x;
newborn->next = cap[hash(x)];
cap[hash(x)] = newborn;
}
void Sterge(int x)
{
nod*ptr = new nod;
ptr->val = cap[hash(x)]->val;
ptr->next = cap[hash(x)]->next;
if (cap[hash(x)]->val == x)
{
cap[hash(x)]->val = NULL;
}//nu pot sterge capul listei,asa ca il fac o fantoma
while (ptr->next != NULL)
{
if ((ptr->next)->val == x)
{
nod* deSters = ptr->next;
ptr->next = ptr->next->next;
delete deSters;
}
ptr = ptr->next;
}
}
bool Verifica(int x)
{
nod*ptr = new nod;
ptr->val = cap[hash(x)]->val;
ptr->next = cap[hash(x)]->next;
//printf("Verific daca elementul %d este in lista %d cu capul %d\n", x, hash(x),cap[hash(x)]->val);
while (ptr->next!= NULL)
{
if (ptr->val == x)
{
//printf("Aici sunt!\n");
return 1;
}
ptr = ptr->next;
}
return 0;
}
int main(){
InitLista();
int Q;
int x, type;
fscanf(fin, "%d", &Q);
for (int i = 1; i <= Q; i++)
{
fscanf(fin, "%d%d", &type, &x);
switch (type)
{
case 1:
Adauga(x);
//printf("Am adaugat elementul %d la lista %d\n", x,hash(x));
break;
case 2:
Sterge(x);
//printf("Am sters elementul %d din lista %d\n", x,hash(x));
break;
case 3:
fprintf(fout, "%d\n", Verifica(x));
//printf("Am verificat daca elementul %d este in tabel si %s este\n", x,Verifica(x)?"":"nu");
break;
}
}
return 0;
}