Pagini recente » Cod sursa (job #1415417) | Cod sursa (job #125801) | Cod sursa (job #628210) | Cod sursa (job #985652) | Cod sursa (job #2456289)
#include<fstream>
using namespace std;
#define HASH_TABLE_SIZE 666013
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
typedef struct Node {
int data;
struct Node* next;
}Node;
void Hash_Table_Add_Element(int requested_element);
void Hash_Table_Pop_Element(int requested_element);
bool Is_Element_Hash_Table(int requested_element);
Node* head[HASH_TABLE_SIZE];
int main()
{
int no_operations;
int operation_choice;
int no_requested_user;
for (fin >> no_operations;no_operations;no_operations--) {
fin >> operation_choice>>no_requested_user;
switch (operation_choice) {
case 1:
if (!(Is_Element_Hash_Table(no_requested_user)))
Hash_Table_Add_Element(no_requested_user);
break;
case 2:
if(Is_Element_Hash_Table(no_requested_user))
Hash_Table_Pop_Element(no_requested_user);
break;
case 3:
if (Is_Element_Hash_Table(no_requested_user))
fout <<"1"<<endl;
else
fout <<"0"<<endl;
break;
}
}
return 0;
}
void Hash_Table_Add_Element(int requested_element) {
int key = requested_element % HASH_TABLE_SIZE;
Node* temp = new Node;
temp->data = requested_element;
temp->next = head[key];
head[key] = temp;
}
void Hash_Table_Pop_Element( int requested_element) {
/*Node* traversal_pointer = head[requested_element%HASH_TABLE_SIZE];
if (traversal_pointer->data == requested_element && traversal_pointer->next == NULL){
head[requested_element%HASH_TABLE_SIZE] = NULL;
return;
}
else if (traversal_pointer->data == requested_element && traversal_pointer->next != NULL)
head[requested_element % HASH_TABLE_SIZE] = head[requested_element % HASH_TABLE_SIZE]->next;
while (traversal_pointer->next != NULL) {
if (traversal_pointer->next->data == requested_element && traversal_pointer->next->next == NULL) {
traversal_pointer->next = NULL;
break;
}
else if (traversal_pointer->next->data == requested_element && traversal_pointer->next->next != NULL) {
traversal_pointer = traversal_pointer->next->next;
break;
}
traversal_pointer = traversal_pointer->next;
}*/
int key = requested_element % HASH_TABLE_SIZE;
if (head[key]->data == requested_element) {
Node* temp = head[key];
head[key] = head[key]->next;
delete temp;
}
else
{
Node* traversal_pointer;
for(traversal_pointer=head[key];traversal_pointer->next;traversal_pointer=traversal_pointer->next)
if (traversal_pointer->next->data == requested_element) {
Node* temp = traversal_pointer->next;
traversal_pointer->next = traversal_pointer->next->next;
delete temp;
break;
}
}
}
bool Is_Element_Hash_Table(int requested_element) {
int key = requested_element % HASH_TABLE_SIZE;
Node* traversal_pointer;
for(traversal_pointer=head[requested_element];traversal_pointer;traversal_pointer=traversal_pointer->next)
if (traversal_pointer->data == requested_element)
return true;
return false;
}
/*operatia de tipul 1: se adauga elementul x la multime (unde x este un parametru al operatiei). Daca x este deja in multime, atunci aceasta ramane neschimbata.
operatia de tipul 2: se sterge elementul x, daca acesta este deja in multime. In caz contrar, multimea ramane neschimbata.
operatia de tipul 3: returneaza 1 daca si numai daca x este in multime, iar in caz contrar returneaza 0.*/
/*Type 1 Operation:add an element 'x' to our set.If x is already in the set,then */