Pagini recente » Cod sursa (job #1282395) | Cod sursa (job #2068371) | Cod sursa (job #339643) | Cod sursa (job #2095498) | Cod sursa (job #2455997)
#include<fstream>
using namespace std;
#define HASH_TABLE_SIZE 5024869
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
typedef struct Node {
int data;
struct Node* next;
}Node;
void Hash_Table_Add_Element(Node** head, int requested_element);
void Hash_Table_Pop_Element(Node** head, int requested_element);
bool Is_Element_Hash_Table(Node** head, int requested_element);
int main()
{
int no_operations;
int operation_choice;
int no_requested_user;
Node** head = new Node * [HASH_TABLE_SIZE]();
for (int i = 0; i < HASH_TABLE_SIZE; i++)
head[i] = nullptr;
for (fin >> no_operations;no_operations;no_operations--) {
fin >> operation_choice>>no_requested_user;
switch (operation_choice) {
case 1:
if (!(Is_Element_Hash_Table(head, no_requested_user)))
Hash_Table_Add_Element(head, no_requested_user);
break;
case 2:Hash_Table_Pop_Element(head, no_requested_user); break;
case 3:
if (Is_Element_Hash_Table(head, no_requested_user))
fout <<"1"<<endl;
else
fout <<"0"<<endl;
break;
}
}
return 0;
}
void Hash_Table_Add_Element(Node** head, int requested_element) {
Node* temp = new Node;
temp->data = requested_element;
temp->next = nullptr;
if (head[requested_element%HASH_TABLE_SIZE] == nullptr)
head[requested_element%HASH_TABLE_SIZE] = temp;
else
{
temp->next = head[requested_element%HASH_TABLE_SIZE];
head[requested_element%HASH_TABLE_SIZE] = temp;
}
}
void Hash_Table_Pop_Element(Node** head, int requested_element) {
if (head[requested_element%HASH_TABLE_SIZE] == nullptr)
return;
else {
/*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;
}*/
if (head[requested_element % HASH_TABLE_SIZE]->data == requested_element) {
Node* temp = head[requested_element % HASH_TABLE_SIZE];
head[requested_element % HASH_TABLE_SIZE] = head[requested_element % HASH_TABLE_SIZE]->next;
delete temp;
}
else
{
Node* traversal_pointer;
traversal_pointer= head[requested_element % HASH_TABLE_SIZE];
while (traversal_pointer->next != nullptr) {
if (traversal_pointer->next->data == requested_element) {
Node* temp = traversal_pointer->next;
traversal_pointer->next = traversal_pointer->next->next;
delete temp;
break;
}
traversal_pointer = traversal_pointer->next;
}
}
}
}
bool Is_Element_Hash_Table(Node** head, int requested_element) {
if (head[requested_element%HASH_TABLE_SIZE] == nullptr)
return false;
else {
Node* traversal_pointer = head[requested_element%HASH_TABLE_SIZE];
while (traversal_pointer != nullptr) {
if (traversal_pointer->data == requested_element)
return true;
traversal_pointer = traversal_pointer->next;
}
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 */