Cod sursa(job #1042671)

Utilizator impulseBagu Alexandru impulse Data 27 noiembrie 2013 16:08:10
Problema Hashuri Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.86 kb
//
//  main.c
//  hashuri
//
//  Created by Alexandru Bâgu on 11/27/13.
//  Copyright (c) 2013 Alexandru Bâgu. All rights reserved.
//

#include <stdio.h>

#define HASH_KEY 131072

struct hashPoint{
    int value;
    struct hashPoint *next;
};

#define node struct hashPoint

int add(node* nodes, int x)
{
    node *_node = &nodes[x % HASH_KEY];
    while(_node != NULL)
    {
        if(_node->next == NULL)
        {
            _node->value = x;
            _node->next = malloc(sizeof(node));
            _node->next->next = NULL;
            return 0;
        }
        else
        {
            if(_node->value == x) return 0;
            else _node = _node->next;
        }
    }
    return 0;
}
int rem(node* nodes, int x)
{
    node *_node = &nodes[x % HASH_KEY];
    node * next = _node->next;
    
    while(_node != NULL)
    {
        if(_node->next == NULL)
            return 0;
        else if(_node->value == x)
        {
            _node->value = _node->next->value;
            _node->next = _node->next->next;
            return 1;
        }
        else _node = _node->next;
    }
    return 0;

}
int contains(node* nodes, int x)
{
    node *_node = &nodes[x % HASH_KEY];
    while(_node != NULL)
    {
        if(_node->next == NULL)
        {
            return 0;
        }
        else
        {
            if(_node->value == x) return 1;
            else _node = _node->next;
        }
    }
    return 0;
}

int main(int argc, const char * argv[])
{
    FILE* fin = fopen("hashuri.in", "r"),
    * fout = fopen("hashuri.out", "w");
    
    node *hash = malloc(sizeof(node) * HASH_KEY);
    int n, i;
    int q, x;
    fscanf(fin, "%d", &n);
    for(i = 0; i < n; i++)
    {
        fscanf(fin, "%d %d", &q, &x);
        if(q == 1) add(hash, x);
        else if(q == 2) rem(hash, x);
        else if(q == 3) fprintf(fout, "%d \n", contains(hash, x));
    }
    return 0;
}