Pagini recente » Cod sursa (job #2918919) | Cod sursa (job #1320449) | Cod sursa (job #874280) | Cod sursa (job #1524323) | Cod sursa (job #760313)
Cod sursa(job #760313)
#include <fstream>
static const unsigned int HASH_KEY(666013);
inline unsigned int hash (unsigned int number)
{
return number % HASH_KEY;
}
struct list_element
{
unsigned int value;
struct list_element *next;
};
struct list_element *table [HASH_KEY];
inline bool search_hash (const unsigned int number)
{
struct list_element *it(table[hash(number)]);
while (it)
if (it->value == number)
return true;
else
it = it->next;
return false;
}
inline void hash_add (const unsigned int number)
{
if (search_hash(number))
return;
struct list_element *new_element(new struct list_element);
new_element->value = number;
new_element->next = table[hash(number)];
table[hash(number)] = new_element;
}
inline void hash_remove (const unsigned int number)
{
struct list_element *it(table[hash(number)]);
if (it)
{
if (it->value == number)
{
table[hash(number)] = it->next;
delete it;
return;
}
struct list_element *previous;
while (true)
{
previous = it;
it = it->next;
if (it)
{
if (it->value == number)
{
previous->next = it->next;
delete it;
return;
}
}
else
break;
}
}
}
int main (void)
{
unsigned int data_size;
std::ifstream input("hashuri.in");
input >> data_size;
char operation;
unsigned int number;
std::ofstream output("hashuri.out");
do
{
input >> operation >> number;
if (operation == '1')
hash_add(number);
else if (operation == '2')
hash_remove(number);
else
{
if (search_hash(number))
output.put('1');
else
output.put('0');
output.put('\n');
}
--data_size;
}
while (data_size);
input.close();
output.close();
return 0;
}