Pagini recente » Borderou de evaluare (job #1279076) | Cod sursa (job #1970481) | Cod sursa (job #2765626) | Cod sursa (job #782459) | Cod sursa (job #2153410)
#include <stdio.h>
#include <stdlib.h>
#define PRIME 786433
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; /*
printf("CAUT PE %d\n", val);
printf("INCERC SA AFISEZ PE");
printf(" %d\n", head->value); */
if (temp->value == val) {
head = head->next;
free(temp);
return;
}
while (temp->value != val && temp->next != NULL) {
prev = temp;
temp = temp->next;
}
if (temp->next == 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];
if (temp->value == val)
return 1;
while (temp->next != NULL && temp->next->value != val)
temp = temp->next;
if (temp != NULL && temp->value == val)
return 1;
return 0;
}
int main()
{
int i;
for (i = 0; i < PRIME; i++) {
hash[i] = malloc(sizeof(list));
hash[i]->value = NULL;
hash[i]->next = NULL;
}
int n, read;
scanf("%d", &n);
for (i = 0; i < n; i++) {
scanf("%d", &read);
if (read == 1) {
scanf("%d", &read);
add_hash(read);
}
else if (read == 2) {
scanf("%d", &read);
remove_hash(read);
}
else {
scanf("%d", &read);
printf("%d\n", search(read));
}
}
return 0;
}