Cod sursa(job #710610)

Utilizator StefanLacheStefan Lache StefanLache Data 10 martie 2012 13:27:00
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include<stdio.h>
#include<stdlib.h>
#define nr 666013
struct nod
{
    int info;
    nod *adr_urm;
};
nod *v[1000];
int search(nod *v[1000],int x,int m)
{
     int i=x % m;                               //functia hash este  h(x)=x%m
     while(v[i])
             {
                 if(v[i]->info == x)
                    return 1;
                 v[i]=v[i]->adr_urm;
             }
     return 0;
}
void insert(nod *v[1000],int x,int m)
{
     int i=x%m;
     if(search(v,x,m)==0)
     {
         nod *p=(nod *)malloc(1*sizeof(nod));
        p->info=x;
        p->adr_urm=v[i];
        v[i]=p;
     }
}
void sterge(nod *v[1000],int x,int m)
{
    if(search(v,x,m)==1)
    {
      int i=x%m;
      if(v[i]->info == x)
            {
                v[i]=v[i]->adr_urm;
                return ;
            }
      while(v[i]->adr_urm->info != x)
            v[i]=v[i]->adr_urm;
      v[i]->adr_urm = v[i]->adr_urm->adr_urm;
    }
}
int main()
{
    int n,i,N,op,x;
    FILE *f=fopen("hashuri.in","rt");
    FILE *g=fopen("hashuri.out","wt");
    fscanf(f,"%i",&N);
    for(i=0;i<N;i++)
        {
           fscanf(f,"%i%i",&op,&x);
           if(op==1)
                if(search(v,x,nr)==0)
                    insert(v,x,nr);
            if(op==2)
                sterge(v,x,nr);
                else if(op==3)
                        fprintf(g,"%i\n",search(v,x,nr));
        }

    return 0;
}