Pagini recente » Cod sursa (job #664669) | Cod sursa (job #658178) | Cod sursa (job #1011138) | Cod sursa (job #96025) | Cod sursa (job #2422249)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
const int M=9973;
typedef struct List_{
int valoare;
List_ * urmator;
}List;
typedef List*Hash[M];
Hash H;
void InitHash(Hash H){
for(int i=0;i<M;H[i++]=NULL);
}
int h(int K){
return K%M;
}
bool Search(int K){
List* cap;
for(cap=H[h(K)];cap&&(cap->valoare!=K);cap=cap->urmator);
return cap!=NULL;
}
void Add(Hash H,int K){
List * elem=(List*)malloc(sizeof(List));
elem->valoare=K;
elem->urmator=H[h(K)];
H[h(K)]=elem;
}
void StergereInterior(List* predecesor){
List * deSters=predecesor->urmator;
predecesor->urmator=predecesor->urmator->urmator;
delete deSters;
}
void StergereValoare(List * &cap,int K){
if(cap==NULL)
return ;
if(cap->valoare==K)
{
List*deSters=cap;
cap=cap->urmator;
delete deSters;
return ;
}
List * elem=cap;
while(elem->urmator!=NULL&&(elem->urmator->valoare!=K))
elem=elem->urmator;
if(elem->urmator!=NULL)
StergereInterior(elem);
}
int main(){
InitHash(H);
int n;
fin>>n;
for(int i=0;i<n;++i){
int operatie,numar;
fin>>operatie>>numar;
if(operatie==1){
Add(H,numar);
}
else
if(operatie==2){
while(Search(numar))
StergereValoare(H[h(numar)],numar);
}
else{
fout<<Search(numar)<<"\n";
}
}
fin.close();
fout.close();
return 0;
}