Cod sursa(job #2203859)

Utilizator Steff94Stefan Steff94 Data 13 mai 2018 15:19:15
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.75 kb
#include<iostream>
#include<cstdlib>
#include<fstream>
//#define prim 127
using namespace std;

ifstream f("hashuri.in");
ofstream g("hashuri.out");

struct nod {
	int info;
	nod *next;
};

int exists(nod *p, int info) {
	nod *q = p;
	while (q != NULL) {
		if (q->info == info)
			return 1;
	}
	return 0;
}

void add_nod(nod *&p, nod *&u, int info) {
	if (!exists(p,info)) {
		if (p == NULL) {
			p = new nod;
			p->info = info;
			u = p;
			u->next = NULL;
		}
		else {
			nod *c = new nod;
			c->info = info;
			u->next = c;
			u = c;
			u->next = NULL;
		}
	}
}

void delete_nod(nod *&p, nod *&u, int s) {
	if (p == NULL) return;
	if ((p->next == NULL) && (p->info = s)) {
		delete p;
		p = u = NULL;
		return;
	}
	nod *c = p;
	p = p->next;

	while (p->next != NULL) {
		if (p->info = s)
		{
			c->next = p->next;
			delete p;
		}
		p = p->next;
		c = c->next;
	}

	if (p->info = s) {
		delete p;
		c->info = NULL;
	}
}

int search_nod(nod *&p, nod *&u, int s) {
	nod *q = p;
	while (q != NULL) {
		if (q->info == s)
			return 1;
	}
	return 0;
}

int main()
{
	int nr_op, op, x, prim = 127;
	nod * p[127], *u[127];
	for (int i = 0; i < prim; i++) {
		p[i] = u[i] = NULL;
	}

	f >> nr_op;
	while (!f.eof()) {
		f >> op >> x;
		if (op == 1) {
			add_nod(p[x%prim], u[x%prim], x);
		}
		if (op == 2) {
			delete_nod(p[x%prim], u[x%prim], x);
		}
		if (op == 3) {
			g << search_nod(p[x%prim], u[x%prim], x) << endl;
		}
	}
		
	//printing an array of linked lists
	for (int i = 0; i < prim; i++) {
		if (p[i] != NULL) {
			nod *c;
			c = p[i];
			cout << i << ": ";
			while (c != NULL) {
				cout << c->info << " ";
				c = c->next;
			}
		}
	}

	system("Pause");
	return 0;
}