Return to Snippet

Revision: 68564
at January 20, 2015 04:24 by mjug


Initial Code
#include <iostream>
using namespace std;
#define MAX_elem 100000

typedef int labeltype;

struct elem {
	labeltype label;
	int firstchild, nextsibling; };

struct tr {
	elem eleme[MAX_elem];
	int first; };

void IniT (int x, tr *s) {
	for (int i = 0; i < MAX_elem; i++) {
		s->eleme[i].firstchild = -1;
		s->eleme[i].nextsibling = -1;
		s->eleme[i].label = -1; }
	s->first = x;
	cout << "Upisite oznaku korijena: " << endl;
	cin >> s->eleme[x].label;

	}

int RootT (tr *s) {
	return s->first; }

void CreateT (int x, int n, tr *s) { // x dijete cvora n
	//Provjerava da li cvor uopce i postoji
	if (s->eleme[n].label == -1) {
		cout << "Cvor ne postoji!" << endl; }

	// Ako evor nema dijece dodaj mu djete
	else if (s->eleme[n].firstchild == -1) {
		s->eleme[n].firstchild = x;
		cout << "Oznaka: ";
		cin >> s->eleme[x].label; }

	//ako evor ima dijete
	else {
		int brat;
		bool provjera = true;

		brat = s->eleme[n].firstchild;
		do {
			if (s->eleme[brat].nextsibling == -1) {
				provjera = false; }

			else {
				brat = s->eleme[brat].nextsibling; } }
		while (provjera);

		s->eleme[brat].nextsibling = x;
		cout << "Oznaka: ";
		cin >> s->eleme[x].label; } }

int FirstChildT (int x, tr *s) {
	return s->eleme[x].firstchild; }

int NextSiblingT (int n, tr *s) {
	return s->eleme[n].nextsibling; }

int ParentT (int n, tr *s) {
	for (int i = 0; i < MAX_elem; i++) {
		if (s->eleme[i].firstchild == n) {
			return i; }
		else if (s->eleme[i].nextsibling == n) {
			return ParentT (i, s); } }
	return -1; }

int LabelT (int n, tr *s) {
	if (s->eleme[n].label == -1) {
		return -1; }
	else {
		return s->eleme[n].label; } }
void ChangeLabelT (int x, int n, tr *s) {
	if (s->eleme[n].label == -1) {
		cout << "Cvor ne postoji!" << endl;
		return; }

	s->eleme[n].label = x; }

void Delete (int n, tr *s) {
	if (s->eleme[n].nextsibling == -1 && s->eleme[ParentT (n, s)].firstchild == n) {
		s->eleme[ParentT (n, s)].firstchild = -1;
		s->eleme[ParentT (n, s)].label = -1;
		s->eleme[n].label = -1; }
	else if (s->eleme[n].nextsibling != -1 && s->eleme[ParentT (n, s)].firstchild == n) {
		s->eleme[ParentT (n, s)].firstchild = s->eleme[n].nextsibling; }
	else {
		int brat = s->eleme[ParentT (n, s)].firstchild;
		while (s->eleme[brat].nextsibling != n) {
			brat = s->eleme[brat].nextsibling; }
		s->eleme[brat].nextsibling = s->eleme[n].firstchild; } }

void DeleteT (int n, tr *s) {
	if (s->eleme[n].label == -1) {
		cout << "Cvor ne postoji!" << endl; }

	else if (s->eleme[n].firstchild != -1) {
		while (s->eleme[n].firstchild != -1) {
			Delete (s->eleme[n].firstchild, s); }
		Delete (n, s); }
	else {
		Delete (n, s); } }

Initial URL


Initial Description
opcenito stablo

Initial Title
opcenito stablo.h

Initial Tags


Initial Language
C++