Pagini recente » Cod sursa (job #1679341) | Cod sursa (job #1172120) | Cod sursa (job #1123579) | Cod sursa (job #1770076) | Cod sursa (job #2455436)
#include<fstream>
using namespace std;
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,int no_operations);
void Hash_Table_Pop_Element(Node** head, int requested_element, int no_operations);
bool Is_Element_Hash_Table(Node** head, int requested_element, int no_operations);
int main()
{
int no_operations;
int operation_choice;
int no_requested_user;
fin >> no_operations;
Node** head = new Node * [no_operations];
for (int i = 0; i < no_operations; i++)
head[i] = NULL;
for (int current_operation = 1; current_operation <= no_operations; current_operation++) {
fin >> operation_choice>>no_requested_user;
switch (operation_choice) {
case 1:Hash_Table_Add_Element(head, no_requested_user, no_operations); break;
case 2:Hash_Table_Pop_Element(head, no_requested_user, no_operations); break;
case 3:
if (Is_Element_Hash_Table(head, no_requested_user, no_operations))
fout <<"1"<<endl;
else
fout <<"0"<<endl;
break;
}
}
return 0;
}
void Hash_Table_Add_Element(Node** head, int requested_element,int no_operations) {
Node* temp = new Node;
temp->data = requested_element;
temp->next = NULL;
if (no_operations >= requested_element) {
if (head[no_operations % requested_element] == NULL) {
//head[no_operations % requested_element] = new Node;
head[no_operations % requested_element] = temp;
}
else
{
/*Node* traversal_pointer = head[no_operations % requested_element];
while (traversal_pointer->next != NULL)
traversal_pointer = traversal_pointer->next;
traversal_pointer->next = temp;*/
temp->next = head[no_operations%requested_element];
head[no_operations % requested_element] = temp;
}
}
else
{
if (head[requested_element%no_operations] == NULL) {
//head[requested_element%no_operations] = new Node;
head[requested_element%no_operations] = temp;
}
else
{
/*Node* traversal_pointer = head[requested_element%no_operations];
while (traversal_pointer->next != NULL)
traversal_pointer = traversal_pointer->next;
traversal_pointer->next = temp;
}*/
temp->next = head[requested_element % no_operations];
head[requested_element % no_operations] = temp;
}
}
}
void Hash_Table_Pop_Element(Node** head, int requested_element, int no_operations) {
if (no_operations >= requested_element) {
if (head[no_operations % requested_element] == NULL)
return;
else {
Node* traversal_pointer = head[no_operations % requested_element];
if (traversal_pointer->data == requested_element && traversal_pointer->next == NULL){
head[no_operations % requested_element] = NULL;
return;
}
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;
}
}
}
else
{
if (head[requested_element%no_operations] == NULL)
return;
else {
Node* traversal_pointer = head[requested_element%no_operations];
if (traversal_pointer->data == requested_element && traversal_pointer->next == NULL) {
head[requested_element%no_operations] = NULL;
return;
}
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;
}
}
}
}
bool Is_Element_Hash_Table(Node** head, int requested_element, int no_operations) {
if (no_operations >= requested_element) {
if (head[no_operations % requested_element] == NULL)
return false;
else {
Node* traversal_pointer = head[no_operations % requested_element];
while (traversal_pointer != NULL) {
if (traversal_pointer->data == requested_element)
return true;
traversal_pointer = traversal_pointer->next;
}
return false;
}
}
else
{
if (head[requested_element%no_operations] == NULL)
return false;
else {
Node* traversal_pointer = head[requested_element%no_operations];
while (traversal_pointer != NULL) {
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.*/