Pagini recente » Cod sursa (job #269332) | Cod sursa (job #305163) | Cod sursa (job #429207) | Cod sursa (job #429591) | Cod sursa (job #304651)
Cod sursa(job #304651)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define nMax 1000001
int empty[nMax];
int hFct(int x,int i)
{
printf("%d\n",(x+i*(1+x%999997))%nMax);
getchar();
return (x+i*(1+x%999997))%nMax;
}
void hInsert(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if ((hTable[crt]==0)||(empty[crt]))
{
hTable[crt]=x;
empty[crt]=0;
break;
}
else if ((hTable[crt]==x)&&(empty[crt]==0))
{
break;
}
}
}
void hDelete(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if ((hTable[crt]==x)&&(empty[crt]==0))
{
puts("sters");
empty[crt]=1;
break;
}
else if ((hTable[crt]==0)&&(empty[crt]==0))
{
break;
}
}
}
int hFind(int *hTable,int x)
{
int i,crt;
for (i=0;i<nMax;i++)
{
crt=hFct(x,i);
if ((hTable[crt]==x)&&(empty[crt]==0))
{
return 1;
}
else if (hTable[crt]==0)
{
return 0;
}
}
return 0;
}
int main()
{
FILE *fin,*fout;
fin=fopen("hashuri.in","r");
fout=fopen("hashuri.out","w");
int i,x,*hTable;
int cmd,n;
hTable=(int *)malloc(sizeof(int)*nMax);
memset(hTable,'\0',sizeof(int)*nMax);
fscanf(fin,"%d",&n);
for (i=0;i<n;i++)
{
fscanf(fin,"%d %d",&cmd,&x);
printf("%d %d\n",cmd,x);
switch (cmd)
{
case 1:hInsert(hTable,x);
break;
case 2:hDelete(hTable,x);
break;
case 3:if (hFind(hTable,x))
fputs("1\n",fout);
else
fputs("0\n",fout);
break;
default:
break;
}
}
fclose(fin);
fclose(fout);
}