Revision: 38681
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 6, 2011 05:59 by tomislav_matic
Initial Code
#include "a_zadatak.h"
#include <iostream>
using namespace std;
int main(void) {
tree T;
cout << "Test 1 (init funkcija)" << endl;
InitT(1, &T);
cout << "Test 1 zavrsen" << endl;
cout << "Test 2 (label, init, root funkcije): ispisuje 1 ako je tocno." << endl;
cout << LabelT(RootT(&T), &T) << endl;;
cout << "Test 2 zavrsen" << endl;
cout << "Test 3 (create ): bez ispisa" << endl;
CreateT(2, RootT(&T), &T);
CreateT(3, RootT(&T), &T);
cout << "Test 3 zavrsen" << endl;
cout << "Test 4 (create, first child, next sibling): ispisuje 2,3" << endl;
cout << LabelT(FirstChildT(RootT(&T), &T), &T) << endl;
cout << LabelT(NextSiblingT(FirstChildT(RootT(&T), &T), &T), &T) << endl;
cout << "Test 4 zavrsen" << endl;
cout << "Test 5 (create): bez ispisa" << endl;
CreateT(4, FirstChildT(RootT(&T), &T), &T);
CreateT(5, FirstChildT(RootT(&T), &T), &T);
cout << "Test 5 zavrsen" << endl;
cout << "Test 6 (change label): ispisuje \"42\"" << endl;
ChangeLabelT(42, FirstChildT(RootT(&T), &T), &T);
cout << LabelT(FirstChildT(RootT(&T), &T), &T) << endl;
cout << "Test 6 zavrsen" << endl;
cout << "Test 7 (delete): bez ispisa" << endl;
DeleteT(FirstChildT(RootT(&T), &T), &T);
cout << "Test zavrsen" << endl;
cout << "Test 8 (delete): ispisuje 3" << endl;
cout << LabelT(FirstChildT(RootT(&T), &T) , &T);
cout << endl;
return 0;
}
BIBLIOTEKA A
struct elem {
int label;
int child,sibling;
bool empty;
};
struct tree {
elem elements[10000];
int first;
};
typedef int node;
node ParentT(node n, tree* T) {
for (int i = 1; i < 10000; i++) {
if (T->elements[i].child == n)
return i;
else {
if (T->elements[i].sibling == n)
return ParentT(i, T);
}
}
return 0;
}
node FirstChildT(node n, tree*T) {
return (T->elements[n].child);
}
node NextSiblingT(node n, tree*T) {
return (T->elements[n].sibling);
}
int LabelT(node n, tree*T) {
return (T->elements[n].label);
}
node RootT(tree*T) {
return (T->first);
}
void CreateT(int x, node n, tree*T) {
int i;
for (i = 1; i < 10000; i++) {
if (T->elements[i].empty) {
T->elements[i].empty = false;
T->elements[i].label = x;
break;
}
}
node Parent = n;
node sib;
if (FirstChildT(Parent, T) == 0) {
T->elements[Parent].child = i;
}
else {
sib = FirstChildT(Parent, T);
while(2 < 5) {
if (NextSiblingT(sib, T) != 0) {
sib = NextSiblingT(sib, T);
}
else {
break;
}
}
T->elements[sib].sibling = i;
}
}
void ChangeLabelT(int x, node n, tree *T) {
T->elements[n].label = x;
}
void rekurzivno_brisanje (node n, tree *T) {
if (FirstChildT(n, T))
rekurzivno_brisanje(FirstChildT(n, T), T);
if (NextSiblingT(n, T))
rekurzivno_brisanje(NextSiblingT(n, T), T);
T->elements[n].empty = true;
}
void DeleteT(node n, tree *T) {
rekurzivno_brisanje(FirstChildT(n, T), T);
node Parent = ParentT(n, T);
node buraz;
if (FirstChildT(Parent, T) == n) {
T->elements[Parent].child = NextSiblingT(n, T);
}
else if (NextSiblingT(n, T)) {
buraz = FirstChildT(Parent, T);
while (2 > -2) {
if (NextSiblingT(buraz, T)) {
buraz = NextSiblingT(buraz, T);
}
else {
break;
}
}
T->elements[buraz].sibling = T->elements[n].sibling;
}
else {
buraz = FirstChildT(Parent, T);
while (2 > -2) {
if (NextSiblingT(buraz, T)) {
buraz = NextSiblingT(buraz, T);
}
else {
break;
}
}
T->elements[buraz].sibling = 0;
}
}
void InitT(int x, tree *T) {
for (int i = 2; i < 10000; i++) {
T->elements[i].empty = true;
T->elements[i].child = 0;
T->elements[i].sibling = 0;
}
T->first = 1;
T->elements[1].empty = false;
T->elements[1].label = x;
}
Initial URL
Initial Description
Initial Title
opcenito stablo sa bibliotekom_a
Initial Tags
Initial Language
C++