Cod sursa(job #2456399)

Utilizator Neri-kunNeri-kun Neri-kun Data 14 septembrie 2019 11:45:50
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.27 kb

#include<stdio.h>
using namespace std;
#define HASH_TABLE_SIZE 666013
FILE*f=fopen("hashuri.in","r");
FILE*g=fopen("hashuri.out","w");
 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()
{
	Node**head=new Node*[HASH_TABLE_SIZE];
	for (int i = 0; i < HASH_TABLE_SIZE; i++)
		head[i] = NULL;
	int no_operations;
	int operation_choice;
	int no_requested_user;
	for (fscanf(f, "%d", &no_operations);no_operations; no_operations--) {
		fscanf(f, "%d %d", &operation_choice, &no_requested_user);
		if (operation_choice == 1) {
			if (!(Is_Element_Hash_Table(head,no_requested_user)))
				Hash_Table_Add_Element(head,no_requested_user);
		}
		else if (operation_choice == 2) {
			if (Is_Element_Hash_Table(head,no_requested_user))
				Hash_Table_Pop_Element(head,no_requested_user);
		}
		else
			fprintf(g, "%d\n", Is_Element_Hash_Table(head,no_requested_user));

	}
	return 0;
}
void Hash_Table_Add_Element(Node**head,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(Node**head,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(Node**head,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;

}