Pagini recente » Cod sursa (job #2065005) | minue5 | Cod sursa (job #594484) | Cod sursa (job #2737528)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
struct nod
{
int info;
nod* urm;
};
const int p=98317; ///pentru functia de dispersie
int n;
vector <nod*> ht;
void Adauga(int poz, int val)
{
nod *aux=new nod;
nod *nou=new nod;
nou->info=val;
nou->urm=nullptr;
if(ht[poz]==nullptr)
ht[poz]=nou;
else
{
for(aux=ht[poz]; aux->urm; aux=aux->urm); //merg pana la finalul listei
aux->urm=nou;
}
}
void Sterge(int poz, int val)
{
nod *aux1=new nod;
nod *aux2=new nod;
if(ht[poz]==nullptr)
return;
if(ht[poz]->info==val) //primul element e cel cautat
{
nod *prim=ht[poz];
ht[poz]=ht[poz]->urm;
delete prim;
}
else
{
aux1=ht[poz];
for(aux2=aux1->urm;aux2;aux2=aux2->urm, aux1=aux1->urm)
if(aux2->info==val)
{
aux1->urm=aux2->urm;
delete aux2;
}
}
}
bool Cauta(int poz,int val)
{
nod* aux=new nod;
for(aux=ht[poz]; aux; aux=aux->urm)
if(aux->info==val)
return 1;
return 0;
}
void Initializare()
{
for(int i=0;i<p;i++)
ht.push_back(nullptr);
}
int main()
{
int x,q;
fin>>n;
Initializare();
for(int i=0; i<n; i++)
{
fin>>q>>x;
if(q==1)
Adauga(x%p,x); //adauga la casuta x%p, la finalul listei, valoarea x
else if(q==2)
Sterge(x%p,x); //sterge de la casuta x%p valoarea x, daca exista
else //q=3
fout<<Cauta(x%p,x)<<"\n"; //cauta la casuta x%p valoarea x
}
return 0;
}