Cod sursa(job #1312976)

Utilizator Denisa13Stefan Denisa Denisa13 Data 10 ianuarie 2015 11:03:20
Problema Hashuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("hashuri.in");
ofstream g("hashuri.out");

unsigned long n,m=573571,x;
struct nod {unsigned long info;
            nod *next;} *p, *h[573571],*q;
void insert()
{
    unsigned long poz=x%m;
    if(h[poz]==NULL)
    {
        p=new nod;
        p->info=x;
        p->next=NULL;
        h[poz]=p;
    }
    else
    {
        p=h[poz];
        while(p->next!=NULL && p->info!=x)
            p=p->next;
        if(p->info!=x)
        {
            q=new nod;
            q->info=x;
            q->next=NULL;
            p->next=q;
        }
    }
}
void erase()
{
    unsigned long poz=x%m;
    p=h[poz];
    if(p->info==x)
    {
        p=p->next;
        h[poz]=p;
    }
    else
    {
        q=p;
        p=p->next;
        while(p->next!=NULL && p->info!=x)
        {
            q=p;
            p=p->next;
        }
        if(p->info==x)
            q->next=p->next;
    }
}
bool query()
{
    unsigned long poz=x%m;
    p=h[poz];
    while(p!=NULL)
        if(p->info==x)
            return 1;
    return 0;
}
int main()
{
    f>>n;
    unsigned long i;
    int op;
    for(i=0;i<=m-1;i++)
        h[i]=NULL;
    for(i=1;i<=n;i++)
    {
        f>>op>>x;
        if(op==1)
            insert();
        if(op==2)
            erase();
        if(op==3)
            g<<query()<<endl;
    }
    for(i=0;i<=m-1;i++)
       if(h[i]!=NULL)
        {
            while(h[i]!=NULL)
            {
                cout<<h[i]->info<<' ';
                h[i]=h[i]->next;
            }
            cout<<endl;
        }

    return 0;
}