Cod sursa(job #770326)

Utilizator AncaPopaPopa Anca-Cristiana AncaPopa Data 22 iulie 2012 18:02:32
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include<stdio.h>
#include<malloc.h>
#define MAXH 666013

typedef struct nod{
	int param;
	nod *leg;
}*LISTA;


LISTA adauga(LISTA prim, int param){
	LISTA p;

	if(prim == NULL){
	
		prim = (LISTA)malloc(sizeof(nod));
		prim->param = param;
		prim->leg = NULL;
		return prim;
	}
	p = (LISTA)malloc(sizeof(nod));
	p->param = param;
	p->leg = prim;
	prim = p;
	return prim;
}

LISTA stergere(LISTA prim, int param){
	LISTA p;

	if(prim == NULL) return NULL;
	if(prim->param == param) {
		p = prim->leg;
		free(prim);
		return p;
	}

	p = prim;

	while(p->leg != NULL){
		if(p->leg->param == param){
			
			LISTA r = p->leg;
			p->leg = p->leg->leg;
			free(r);
			return prim;
		}
		p = p->leg;
	}
	return prim;
}

int cautare(LISTA prim, int param){
	LISTA p = prim;

	while(p != NULL){
		if(p->param == param)return 1;
		p = p->leg;
		
	}
	return 0;

}

int main(){

	LISTA *h = (LISTA*)malloc(MAXH * sizeof(LISTA));
	int n, op, param, i;
	FILE *f = fopen("hashuri.in", "r");
	FILE *g = fopen("hashuri.out", "w");

	for(i = 0; i < MAXH; i++)
		h[i] = NULL;

	fscanf(f, "%d", &n);

	for(i = 0; i<n; i++){
		
		fscanf(f, "%d%d", &op, &param);
		
		if(op == 1){
			
			int r = param % MAXH;
			if(cautare(h[r], param) == 0)
				h[r] = adauga(h[r], param);

		}

		if(op == 2){
		
			int r = param % MAXH;

			h[r] = stergere(h[r], param);

		}

		if(op == 3){
			
			int r = param % MAXH;

			fprintf(g, "%d\n", cautare(h[r], param));
		}
		
	}
	fclose(f);
	fclose(g);


}