Cod sursa(job #2456354)

Utilizator Neri-kunNeri-kun Neri-kun Data 14 septembrie 2019 11:10:54
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.08 kb

#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;
 Node* head[HASH_TABLE_SIZE];
void Hash_Table_Add_Element(int requested_element);
void Hash_Table_Pop_Element(int requested_element);
bool Is_Element_Hash_Table(int requested_element);
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;
		if (operation_choice == 1) {
			if (!(Is_Element_Hash_Table(no_requested_user)))
				Hash_Table_Add_Element(no_requested_user);
		}
		else if (operation_choice == 2) {
			if (Is_Element_Hash_Table(no_requested_user))
				Hash_Table_Pop_Element(no_requested_user);
		}
		else
			fout << Is_Element_Hash_Table(no_requested_user) << endl;

	}
	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) {
			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%HASH_TABLE_SIZE];traversal_pointer;traversal_pointer=traversal_pointer->next)
	if (requested_element==traversal_pointer->data)
		return true;
	return false;

}