Pagini recente » Cod sursa (job #2576350) | Cod sursa (job #1899621) | Cod sursa (job #1412886) | Cod sursa (job #2176832) | Cod sursa (job #2191463)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MOD 66013
typedef struct node
{
int key;
struct node *next;
}NodeT;
int Hash( int x )
{
return x % MOD;
}
int Search( NodeT * hTable[ MOD ], int x )
{
for ( NodeT * i = hTable[ Hash( x ) ]; i; i = i->next )
if ( i->key == x )
return 1;
return 0;
}
void Insert( NodeT * hTable[ MOD ], int x )
{
int find = Search( hTable, x );
if ( find == 0 )
{
NodeT * p = ( NodeT * )malloc( sizeof( NodeT ) );
p->next = hTable[ Hash( x ) ];
p->key = x;
hTable[ Hash( x ) ] = p;
}
}
void Delete( NodeT * hTable[ MOD ], int x )
{
int find = Search( hTable, x );
if ( find == 1 )
{
int KEY = Hash( x );
NodeT * prev = NULL;
NodeT * p = hTable[ KEY ];
while ( p->next && p->key != x )
{
prev = p;
p = p->next;
}
if ( prev == NULL )
{
if ( p->next )
hTable[ KEY ] = p->next;
else
hTable[ KEY ] = NULL;
}
else
prev->next = p->next;
free( p );
}
}
int main()
{
NodeT * hTable[ MOD ];
FILE * fin = fopen( "hashuri.in", "r" );
FILE * fout = fopen( "hashuri.out", "w" );
memset( hTable, 0, MOD );
int n, s, key;
fscanf( fin, "%d", &n );
for ( int i = 0; i < n; i ++ )
{
fscanf( fin, "%d %d", &s, &key );
switch ( s )
{
case 1:{Insert( hTable, key );}break;
case 2:{Delete( hTable, key );}break;
case 3:{fprintf(fout, "%d\n", Search( hTable, key ));}break;
}
}
return 0;
}