Pagini recente » Istoria paginii runda/noaptea_burlacilor2/clasament | Cod sursa (job #2910312) | Diferente pentru implica-te/arhiva-educationala intre reviziile 83 si 82 | Cod sursa (job #2805259) | Cod sursa (job #2456399)
#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;
}