Pagini recente » Cod sursa (job #2718159) | Cod sursa (job #2233525) | Cod sursa (job #743936) | Cod sursa (job #2340316) | Cod sursa (job #2154538)
#include <stdio.h>
#include <stdlib.h>
#define PRIME 101359
struct list {
int value;
struct list *next;
};
typedef struct list list;
list *hash[PRIME];
void new_node(list **head, int val) {
list *new;
new = malloc(sizeof(list));
new->next = *head;
new->value = val;
*head = new;
}
void remove_node(list **head, int val) {
list *temp = *head;
list *prev;
if (temp->value == val) {
*head = (*head)->next;
free(temp);
return;
}
while (temp != NULL && temp->value != val) {
prev = temp;
temp = temp->next;
}
if (temp == NULL)
return;
prev->next = temp->next;
free(temp);
}
void add_hash(int val) {
int mod = val % PRIME;
new_node(&hash[mod], val);
}
void remove_hash(int val) {
int mod = val % PRIME;
remove_node(&hash[mod], val);
}
int search(int val) {
int mod = val % PRIME;
list *temp = hash[mod];
while (temp->value != val && temp->next != NULL) {
temp = temp->next;
}
if (temp->value == val)
return 1;
return 0;
}
int main()
{
int read;
int n;
int i;
FILE *in;
FILE *out;
for (i = 0; i < PRIME; i++) {
hash[i] = malloc(sizeof(list));
hash[i]->value = NULL;
hash[i]->next = NULL;
}
in = fopen("hashuri.in", "r");
out = fopen("hashuri.out", "w");
fscanf(in, "%d", &n);
for (i = 0; i < n; i++) {
fscanf(in, "%d", &read);
if (read == 1) {
fscanf(in, "%d", &read);
add_hash(read);
}
else if (read == 2) {
fscanf(in, "%d", &read);
remove_hash(read);
}
else {
fscanf(in, "%d", &read);
fprintf(out, "%d\n", search(read));
}
}
return 0;
}