Cod sursa(job #2292918)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 30 noiembrie 2018 11:22:19
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.18 kb
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

const int p = 1000003;

struct Nod {
    Nod *next;
    int info;
    };

Nod** alocare()
{
    Nod **v;
    v = (Nod**) calloc( p, sizeof(Nod*));
    return v;
}

int h ( int x)
{
    return x%p;
}

void inserare ( Nod** v, int x )
{
    Nod *prim ;
    int poz = h(x);

    for(prim = v[poz]; prim != NULL; prim = prim->next)
    {
        if ( prim ->info == x)
            return;
    }
    Nod *aux = new Nod;
    aux->next = NULL;
    aux->info = x;
    if( v[poz] == NULL )
        v[poz] = aux;
    else{
        aux->next = v[poz] ->next;
        v[poz]->next = aux;
    }
}

void stergere ( Nod** v, int x)
{
    Nod * prim , *pprim;
    int poz = h(x);
    prim = v[poz];
    if( prim == NULL)
        return;
    if( prim->info == x)
    {
        v[poz] = prim->next;
        delete prim;
        return ;
    }

    for(prim = v[poz] ; prim->next != NULL; prim = prim->next)
    {
        if ( prim ->next->info == x)
        {
         pprim = prim->next;
         prim ->next = prim->next->next;
         delete pprim;
         return ;
        }
    }
}

bool cautare( Nod** v, int x)
{
    Nod * prim ;
    int poz = h(x);
    for(prim =  v[poz]; prim != NULL; prim = prim->next)
    {
        if ( prim ->info == x)
            return true;
    }
    return false;

}

void dealloc ( Nod*** v)
{
    for ( int i = 0; i < p; i++)
    {
        Nod* prim = *(*v+i);
        for(; prim != NULL;)
        {
            Nod* aux = prim;
            prim = prim->next;
            delete aux;
        }
    }
    delete *v;
}

int main()
{
    ifstream in ("hashuri.in");
    ofstream out ("hashuri.out");

    Nod **v;
    int n , op, x, i;

    v = alocare ();

    in >> n;
    for ( i = 0 ;i < n; i++)
    {
        in >> op >> x;
        if( op == 1)
            inserare (v, x);
            else{
                if ( op == 2 )
                    stergere(v,x);
                else out <<cautare(v,x) << "\n";
            }
    }

    dealloc (&v);

    in.close();
    out.close();

    return 0;
}