Pagini recente » Cod sursa (job #1724199) | Cod sursa (job #2624262) | Cod sursa (job #2196357) | Cod sursa (job #1548355) | Cod sursa (job #755208)
Cod sursa(job #755208)
#define m 50723 // nr prim
#define j 22
#define r 2
#define masca 4194303
#define y 1429319
#define x_const {1364027, 912846}
#include <stdio.h>
//#include <conio.h>
#include <stdlib.h>
#include <time.h>
/*
** FUNCTIA HASH
** sursa: UPT, AN I, CTI, P&S Proiectul 2 - 2012
*/
int kk[ r ];
int x[] = x_const;
void cioparteste(unsigned long x, int *k) {
int i;
for (i=0; i<r; i++) {
k[i] = x & masca;
x = x >> j;
}
}
int valoare_hash(int *k){
unsigned long i;
int j2;
i=0;
for(j2=0;j2<r;j2++) {
i += k[j2]*x[j2];
}
i+=y;
return i % m;
}
int hashvalue( unsigned long z ) {
int i;
cioparteste(z,kk);
i = valoare_hash(kk);
return i;
}
/*
** END FCTIA HASH
*/
/*
** LISTE INLANTUITE
*/
typedef struct LI {
struct LI *urm;
unsigned long x;
} li;
void LI_ad( li *c, unsigned long x ) {
li *n;
n = (li *)malloc( sizeof( li ) );
n->urm = c->urm;
n->x = x;
c->urm = n;
}
li *LI_srch( li *c, unsigned long x ) {
li *p;
p = c->urm;
while (p != NULL) {
if ( p->x == x ) {
return c;
}
c = p;
p = p->urm;
}
return NULL;
}
void LI_del( li *c, unsigned long x ) {
li *p;
p = LI_srch( c, x );
if ( p != NULL ) {
c = p->urm;
p->urm = p->urm->urm;
free(c);
}
}
li ht[m];
int main(void) {
FILE *fi,*fo;
fi = fopen("hashuri.in","r");
fo = fopen("hashuri.out","w");
int op, no,i,idx;
unsigned long nr;
fscanf(fi, "%d", &no);
for (i=0;i<no;i++) {
fscanf(fi, "%d %u", &op, &nr );
idx = hashvalue( nr );
switch (op) {
case 1:
if ( LI_srch( &ht[idx], nr ) == NULL ) {
LI_ad( &ht[idx], nr );
}
break;
case 2:
LI_del( &ht[idx], nr );
break;
case 3:
fprintf(fo, "%d\n", (LI_srch( &ht[idx], nr ) == NULL) ? 0 : 1 );
}
}
fclose(fi);
fclose(fo);
return 0;
}