Cod sursa(job #489799)

Utilizator alexch16Chelariu Alexandru alexch16 Data 3 octombrie 2010 16:52:45
Problema Hashuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <stdio.h>

struct Hash {
	long nr;
	Hash * urm;
};

class Vect {
private:
	Hash * prim, * ultim;
public:
	Vect();
	void insert(int x);
	void remove(int x);
	int find(int x);
};

Vect::Vect() {
	this->prim = this->ultim = NULL;
}

void Vect::insert(int x) {
	Hash * p = new Hash;
	p->nr = x;
	p->urm = NULL;
	if (!this->prim) 
		this->prim = this->ultim = p;
	else {
		this->ultim->urm = p;
		this->ultim = p;
	}
}

int Vect::find(int x){
	Hash *p;
	for (p = this->prim; p != NULL; p = p->urm)
		if (p->nr == x) return 1;
	return 0;
}

void Vect::remove(int x) {
	Hash *p;
	if (this->prim->nr == x) {
		p = this->prim;
		this->prim = this->prim->urm;
		delete p;
	}

	for ( p = this->prim; p->urm != NULL && p->urm->nr != x; p = p->urm);
	
	if (p) {
		Hash * q = p->urm;
		p->urm = p->urm->urm;
		delete q;
	}
}

int main() {
	FILE * fin = fopen("hashuri.in", "r");
	FILE * fout = fopen("hashuri.out", "w");

	Vect v;

	int n, op, i, x;
	fscanf(fin, "%d", &n);

	for (i = 1; i <= n; i++) {
		fscanf(fin, "%d", &op);
		switch(op) {
		case 1:{
				 fscanf(fin, "%d", &x);
				 if (!v.find(x)) v.insert(x);
			   }break;
		case 2:{
				 fscanf(fin, "%d", &x);
				 v.remove(x);
			   }break;
		case 3:{
				 fscanf(fin, "%d", &x);
				 fprintf(fout, "%d\n", v.find(x));
			   }break;
		}
	}

	fclose(fin);
	fclose(fout);
	return 0;
}