Cod sursa(job #2422249)

Utilizator Rufus007Marincia Catalin Rufus007 Data 18 mai 2019 10:33:49
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#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;
}