Cod sursa(job #2106211)

Utilizator gundorfMoldovan George gundorf Data 15 ianuarie 2018 12:52:49
Problema Hashuri Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 1.56 kb
#include <stdio.h>
#include <stdlib.h>
#define Prim 666013
FILE *f;
FILE *g;

typedef struct element
{
    int info;
   struct  element *urm;

} element;

element *h[Prim];

int query ( int x)
{
    int poz;
    poz=x%Prim;
    element *p;
    if (h[poz]==NULL) return 0; //daca lista e goala returnez 0
    p=h[poz];
    while (p!=NULL)
    {
        if (p->info==x) return 1;//daca e in lista, l am gasit
        p=p->urm;
    }
    return 0; //daca nu s a gasit in liste returnez 0
}

void adaugare (int x)
{
    int poz,ok=0;

    poz=x%Prim;

    element *p,*q;

    p=h[poz];
    while (p!=NULL)
    {
        if (p->info==x) ok=1;//daca e in lista, l am gasit
        p=p->urm;
    }

    if (ok==0) //daca nu e in lista, il adaug
    {   q=(element *) malloc (sizeof(element));
        q->info=x;
        q->urm=h[poz];
        h[poz]=q;
    }


}

void stergere (int x)
{

    int poz,ok=0;
    element *p,*p1;
    poz=x%Prim;
    p=h[poz];
     if (p==NULL) return;

    p1=p->urm;

    if (p1==NULL&&p->info==x) h[poz]=NULL;
    else
        while (p1!=NULL)
    {
        if (p1->info==x) {p->urm=p1->urm; break;}//sterg legatura dintre p si p1

        p1=p1->urm;
        p=p->urm;
    }
}

int main()
{
   f=fopen("hashuri.in","r");
   g=fopen("hashuri.out","w");
   int i,n,x,y;
   fscanf(f,"%d",&n);
   for (i=1;i<=n;i++)
   {
       fscanf(f,"%d %d",&x,&y);
       if (x==1) adaugare(y);
       if (x==2) stergere(y);
       if (x==3) fprintf(g,"%d \n",query(y));
   }
    return 0;
}