Cod sursa(job #712153)

Utilizator StefanLacheStefan Lache StefanLache Data 13 martie 2012 08:29:01
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include<stdio.h>
#include<stdlib.h>
#define nr 666013
struct nod
{
    int info;
    nod *adr_urm;
};
nod *v[666013];
int cauta(int x)
{
     int i=x % nr;
     nod *prim = v[i];                            //functia hash este  h(x)=x%nr
     while(prim)
             {
                 if(prim->info == x)
                    return 1;
                 prim=prim->adr_urm;
             }
     return 0;
}
void insert(int x)
{
     int i=x%nr;
     nod *prim = v[i];
     if(cauta(x)==0)
     {
         nod *p=(nod *)malloc(1*sizeof(nod));
        p->info=x;
        p->adr_urm=prim;
        v[i]=p;
     }
}
void sterge(int x)
{
    if(cauta(x)==1)
    {
      int i=x%nr;
      nod *prim = v[i];
      if(prim->info == x)
            {
                v[i]=prim->adr_urm;
                return ;
            }
      while(prim->adr_urm->info != x)
            prim=prim->adr_urm;
      prim->adr_urm = prim->adr_urm->adr_urm;
    }
}

void afisare()
{
    nod *prim = v[0];
    while(prim)
        {
            printf("%i  ",prim->info);
            prim = prim->adr_urm;
        }
    printf("\n");
}
int main()
{
    int i,N,op,x;
    //FILE *f=fopen("hashuri.in","rt");
    FILE *g=fopen("hashuri.out","wt");
    scanf("%i",&N);
    for(i=0;i<N;i++)
        {
           scanf("%i%i",&op,&x);
           switch(op)
                           {
                               case 1:insert(x);break;
                               case 2:sterge(x);break;
                               case 3:fprintf(g,"%i\n",cauta(x));break;
                           }
            afisare();
        }
    //fclose(f);
    fclose(g);
    return 0;
}