Revision: 38642
Updated Code
at January 6, 2011 04:49 by ivpusic
Updated Code
//Main() #include<iostream> using namespace std; //#include "pokazivac_three.h" #include "polje_three.h" #include "opcenito.h" void opcenitoStablo(){ tree *tree; int vrijednost; cout<<"Pocetna vrijednost korijena je 1"<<endl; tree=InitT(1,tree); cout<<"Unesite vrijdnost cvora (cvor 2): ";cin>>vrijednost; CreateT(vrijednost,2,tree); cout<<"Unesite jos jednu vrijednost cvora (cvor 3): ";cin>>vrijednost; CreateT(vrijednost,3,tree); cout<<"Vrijednost treceg cvora je: "<<LabelT(2,tree)<<endl<<endl; cout<<"Prvo dijete od cvora 2: "<<FirstChildT(2,tree)<<endl; cout<<"Roditelj od cvora 3: "<<ParentT(3,tree)<<endl; cout<<"Unesite novu vrijednost treceg cvora: ";cin>>vrijednost; ChangeLabelT(vrijednost,2,tree); cout<<"Nova vrijednost treceg cvora je: "<<LabelT(2,tree)<<endl<<endl; cout<<"Brisanje cvora 2..."<<endl; DeleteT(2,tree); cout<<"Cvor 2 izbrisan..."<<endl; cout<<"Dealokacija stabla..."<<endl<<endl; delete tree; }//OpcenitoStablo void binarnoStablo(){ cout << "Inicijalizacija stabla" << endl; bt* stablo = InitB(1, stablo); cout << "Korijen: " << LabelB(RootB(stablo), stablo)<< endl << endl; cout << "Kreiranje lijevog dijeteta 15 " << endl; CreateLeftB(15, RootB(stablo), stablo); cout << "Kreiranje desnog dijeta 3 " << endl << endl; CreateRightB(3, RootB(stablo), stablo); cout << "Lijevo dijete korijena: " << LabelB(LeftChildB(RootB(stablo), stablo), stablo)<<endl; cout << "Desno dijete korijena: " << LabelB(RightChildB(RootB(stablo), stablo), stablo)<<endl<<endl; cout << "Kreiranje lijevog djeteta 4 lijevom djetetu korijena (cvor 15)" << endl; CreateLeftB(4, LeftChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje desnog djeteta 5 lijevom djetetu korijana (cvor 15)" << endl; CreateRightB(5, LeftChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje lijevog djeteta 6 desnom djetetu korijana (cvor 3)" << endl; CreateLeftB(6, RightChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje desnog djeteta 7 desnom djetetu korijana (cvor 3)" << endl; CreateRightB(7, RightChildB(RootB(stablo), stablo), stablo); cout<<endl; cout << "Lijevo dijete desnog dijeteta korijena: "; cout << LabelB(LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo) << endl << endl; cout << "Mijenjanje cvora 6 u 16: " << endl << endl; ChangeLabelB(16, LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo); cout << "Lijevo dijete desnog dijeteta korijena: "; cout << LabelB(LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo) << endl << endl; cvor pom = RightChildB(RightChildB(RootB(stablo), stablo), stablo); cout << "Roditelj cvora 7 je: " << LabelB(ParentB(pom, stablo), stablo) << endl << endl; cout << "Brisanje cvora 3 i svih njegovih potomaka..." << endl; DeleteB(RightChildB(RootB(stablo), stablo), stablo); cout<<endl; }//binarnoStablo int main() { int izbor; do{ cout<<"0. Izlaz iz programa"<<endl; cout<<"1. Binarno stablo"<<endl; cout<<"2. Opcenito stablo"<<endl; cout<<"Vas izbor je: "; cin >> izbor; cout<<endl; if(izbor == 1) binarnoStablo(); if(izbor == 2) opcenitoStablo(); }while(izbor != 0); system("pause"); return 0; } //Implementacija opcenitog stabla struct Cvor { int Label; int PrvoDijete; int SljedeciBrat; };//struct struct tree { Cvor element[1000]; int first; };//struct1 tree *InitT(int x,tree *stablo)//inicijalizacija { delete [] stablo->element; stablo=new tree; stablo->first=0; stablo->element[x].Label=x; stablo->first++; }//InitT int FirstChildT(int x, tree *stablo) { if(x<0) return -1; else { if(x>=0 && ((x+1)!=0)) return stablo->element[x].PrvoDijete; else return -1; } }//FirstCildT int NextSiblingT(int x, tree *stablo) { if(x<0) return -1; else { if(stablo->element[x].SljedeciBrat!=-1)return stablo->element[x].SljedeciBrat; else return -1; } }//NextSiblingT int ParentT(int x, tree *stablo) { if(x>0) return x-1; else { if(x==0) return -1; else cout<<"Cvor ne postoji"<<endl; } }//ParentT int LabelT(int x, tree *stablo)//vratiVrijednost { if(x<0) cout<<"Pogreska"<<endl; else { return stablo->element[x].Label; } }//LabelT int ChangeLabelT(int x, int y, tree *stablo) { if(x<0) return -1; else stablo->element[y].Label=x; }//changeLabel int RootT(tree *stablo) { return stablo->element[0].Label; }//RootT int CreateT(int x, int y, tree *stablo)//dodavanje { stablo->element[stablo->first].Label=x; stablo->element[stablo->first].PrvoDijete=y; stablo->first++; }//CreateT int DeleteT(int x, tree *stablo)//brisanje { if(x<0) return -1; else { if(stablo->element[x].PrvoDijete>0) DeleteT(stablo->element[x].PrvoDijete,stablo); else { stablo->element[x].Label=-1; stablo->first--; } } }//DeleteT //Implementacija binarnog (polje) struct element { int label; int koristeno; }; struct bt { element elements[10000]; }; typedef int cvor; bt* InitB(int x, bt* T) {//incijalizacija if(T) delete T; T = new bt; for(int i = 0; i < 10000; i++) T->elements[i].koristeno = 0; T->elements[1].label = x; T->elements[1].koristeno = 1; return T; }//initB void CreateLeftB(int x, cvor n, bt* T) {//kreiraj lijevo if(T->elements[n].koristeno == 0 || T->elements[2*n].koristeno == 1) { cout << "Greska" << endl << endl; return; } T->elements[2*n].koristeno = 1; T->elements[2*n].label = x; }//CreateLeftB void CreateRightB(int x, cvor n, bt* T) {//kreiraj desno if(T->elements[n].koristeno == 0 || T->elements[2*n+1].koristeno == 1) { cout << "Greska" << endl << endl; return; } T->elements[2*n+1].koristeno = 1; T->elements[2*n+1].label = x; }//CreateRightB cvor LeftChildB(cvor n, bt* T) {//lijevo dijete if(T->elements[n].koristeno == 0) return 0; if(T->elements[2*n].koristeno == 1) return 2*n; else return 0; }//LeftCildB cvor RightChildB(cvor n, bt* T) {//desno dijete if(T->elements[n].koristeno == 0) return 0; if(T->elements[2*n+1].koristeno == 1) return 2*n+1; else return 0; }//RightCildB cvor ParentB(cvor n, bt* T) { if(n == 1) return 0; if(n%2) n--; return n/2; }//ParentB int LabelB(cvor n, bt* T) { return T->elements[n].label; }//LabelB void ChangeLabelB(int x, cvor n, bt* T) {//zamjena if(T->elements[n].koristeno == 0) return; T->elements[n].label = x; }//ChangeLabelB cvor RootB(bt* T) { if(T->elements[1].koristeno == 0) return 0; return 1; }//RootB void DeleteB(cvor n, bt* T) { T->elements[n].koristeno = 0; if (LeftChildB(n, T)) DeleteB(LeftChildB(n, T), T); if (RightChildB(n, T)) DeleteB(RightChildB(n, T), T); }//DeleteB //Implementacija binarnog (pokazivac) struct element { int label; element *left,*right; }; typedef element *cvor; typedef element bt; bt* InitB(int x, bt* T) {//inicijalizacija T = new element; T->label = x; T->left = NULL; T->right = NULL; return T; }//initB void CreateLeftB(int x, cvor n, bt* T) {//novi lijevi if(n->left) { cout << "Greska" << endl << endl; return; } cvor novi = new element; n->left = novi; novi->label = x; novi->left = NULL; novi->right = NULL; }//CreateLeftB void CreateRightB(int x, cvor n, bt* T) {//novi desni if(n->right) { cout << "Greska" << endl << endl; return; } cvor novi = new element; n->right = novi; novi->label = x; novi->left = NULL; novi->right = NULL; }//createRightB cvor ParentB(cvor n, bt* T) { if (n == T) return NULL; cvor roditelj = NULL; if (T->left) { if (T->left == n) return T; else roditelj = ParentB(n, T->left); } if(T->right) { if (T->right == n) return T; else roditelj = ParentB(n, T->right); } return roditelj; }//parentB int LabelB(cvor n, bt* T) {//vrati oznaku return n->label; }//labelB void ChangeLabelB(int x, cvor n, bt* T) { if(!n) return; n->label = x; }//changeLabelB cvor LeftChildB(cvor n, bt* T) {//lijevo dijete if(!n || !n->left) return NULL; return n->left; }//leftCildB cvor RightChildB(cvor n, bt* T) {//desno dijete if(!n || !n->right) return NULL; return n->right; }//rightCildB cvor RootB(bt* T) { if(!T) return NULL; return T; }//rootB void DeleteB(cvor n, bt* T) { static bool jednom = false; if(!jednom) { cvor roditelj = ParentB(n, T); if(roditelj->left == n) roditelj->left = NULL; else roditelj->right = NULL; jednom = true; } if(n->left) DeleteB(n->left, T); if(n->right) DeleteB(n->right, T); delete n; }//deleteB
Revision: 38641
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 6, 2011 03:23 by ivpusic
Initial Code
//Main() #include<iostream> using namespace std; //#include "pokazivac_three.h" #include "polje_three.h" #include "opcenito.h" void opcenitoStablo(){ tree *tree; int vrijednost; cout<<"Pocetna vrijednost korijena je 1"<<endl; tree=InitT(1,tree); cout<<"Unesite vrijdnost cvora: ";cin>>vrijednost; CreateT(vrijednost,2,tree); cout<<"Unesite jos jednu vrijednost cvora: ";cin>>vrijednost; CreateT(vrijednost,3,tree); cout<<"Vrijednost drugog cvora je: "<<LabelT(2,tree)<<endl<<endl; cout<<"Unesite novu vrijednost drugog cvora: ";cin>>vrijednost; ChangeLabelT(vrijednost,2,tree); cout<<"Nova vrijednost drugog je: "<<LabelT(2,tree)<<endl<<endl; cout<<"Brisanje cvora 2..."<<endl; DeleteT(2,tree); cout<<"Cvor 2 izbrisan..."<<endl; cout<<"Dealokacija stabla..."<<endl<<endl; delete tree; }//OpcenitoStablo void binarnoStablo(){ cout << "Inicijalizacija stabla" << endl; bt* stablo = InitB(1, stablo); cout << "Korijen: " << LabelB(RootB(stablo), stablo)<< endl << endl; cout << "Kreiranje lijevog dijeteta 15 " << endl; CreateLeftB(15, RootB(stablo), stablo); cout << "Kreiranje desnog dijeta 3 " << endl << endl; CreateRightB(3, RootB(stablo), stablo); cout << "Lijevo dijete korijena: " << LabelB(LeftChildB(RootB(stablo), stablo), stablo)<<endl; cout << "Desno dijete korijena: " << LabelB(RightChildB(RootB(stablo), stablo), stablo)<<endl<<endl; cout << "Kreiranje lijevog djeteta 4 lijevom djetetu korijena (cvor 15)" << endl; CreateLeftB(4, LeftChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje desnog djeteta 5 lijevom djetetu korijana (cvor 15)" << endl; CreateRightB(5, LeftChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje lijevog djeteta 6 desnom djetetu korijana (cvor 3)" << endl; CreateLeftB(6, RightChildB(RootB(stablo), stablo), stablo); cout << "Kreiranje desnog djeteta 7 desnom djetetu korijana (cvor 3)" << endl; CreateRightB(7, RightChildB(RootB(stablo), stablo), stablo); cout<<endl; cout << "Lijevo dijete desnog dijeteta korijena: "; cout << LabelB(LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo) << endl << endl; cout << "Mijenjanje cvora 6 u 16: " << endl << endl; ChangeLabelB(16, LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo); cout << "Lijevo dijete desnog dijeteta korijena: "; cout << LabelB(LeftChildB(RightChildB(RootB(stablo), stablo), stablo), stablo) << endl << endl; cvor pom = RightChildB(RightChildB(RootB(stablo), stablo), stablo); cout << "Roditelj cvora 7 je: " << LabelB(ParentB(pom, stablo), stablo) << endl << endl; cout << "Brisanje cvora 3 i svih njegovih potomaka..." << endl; DeleteB(RightChildB(RootB(stablo), stablo), stablo); cout<<endl; }//binarnoStablo int main() { int izbor; do{ cout<<"0. Izlaz iz programa"<<endl; cout<<"1. Binarno stablo"<<endl; cout<<"2. Opcenito stablo"<<endl; cout<<"Vas izbor je: "; cin >> izbor; cout<<endl; if(izbor == 1) binarnoStablo(); if(izbor == 2) opcenitoStablo(); }while(izbor != 0); system("pause"); return 0; } //Implementacija opcenitog stabla struct Cvor { int Label; int PrvoDijete; int SljedeciBrat; };//struct struct tree { Cvor element[1000]; int first; };//struct1 tree *InitT(int x,tree *stablo)//inicijalizacija { delete [] stablo->element; stablo=new tree; stablo->first=0; stablo->element[x].Label=x; stablo->first++; }//InitT int FirstChildT(int x, tree *stablo) { if(x<0) return -1; else { if(x>=0 && ((x+1)!=0)) return stablo->element[x].PrvoDijete; else return -1; } }//FirstCildT int NextSiblingT(int x, tree *stablo) { if(x<0) return -1; else { if(stablo->element[x].SljedeciBrat!=-1)return stablo->element[x].SljedeciBrat; else return -1; } }//NextSiblingT int ParentT(int x, tree *stablo) { if(x>0) return x-1; else { if(x==0) return -1; else cout<<"Cvor ne postoji"<<endl; } }//ParentT int LabelT(int x, tree *stablo)//vratiVrijednost { if(x<0) cout<<"Pogreska"<<endl; else { return stablo->element[x].Label; } }//LabelT int ChangeLabelT(int x, int y, tree *stablo) { if(x<0) return -1; else stablo->element[y].Label=x; }//changeLabel int RootT(tree *stablo) { return stablo->element[0].Label; }//RootT int CreateT(int x, int y, tree *stablo)//dodavanje { stablo->element[stablo->first].Label=x; stablo->element[stablo->first].PrvoDijete=y; stablo->first++; }//CreateT int DeleteT(int x, tree *stablo)//brisanje { if(x<0) return -1; else { if(stablo->element[x].PrvoDijete>0) DeleteT(stablo->element[x].PrvoDijete,stablo); else { stablo->element[x].Label=-1; stablo->first--; } } }//DeleteT //Implementacija binarnog (polje) struct element { int label; int koristeno; }; struct bt { element elements[10000]; }; typedef int cvor; bt* InitB(int x, bt* T) {//incijalizacija if(T) delete T; T = new bt; for(int i = 0; i < 10000; i++) T->elements[i].koristeno = 0; T->elements[1].label = x; T->elements[1].koristeno = 1; return T; }//initB void CreateLeftB(int x, cvor n, bt* T) {//kreiraj lijevo if(T->elements[n].koristeno == 0 || T->elements[2*n].koristeno == 1) { cout << "Greska" << endl << endl; return; } T->elements[2*n].koristeno = 1; T->elements[2*n].label = x; }//CreateLeftB void CreateRightB(int x, cvor n, bt* T) {//kreiraj desno if(T->elements[n].koristeno == 0 || T->elements[2*n+1].koristeno == 1) { cout << "Greska" << endl << endl; return; } T->elements[2*n+1].koristeno = 1; T->elements[2*n+1].label = x; }//CreateRightB cvor LeftChildB(cvor n, bt* T) {//lijevo dijete if(T->elements[n].koristeno == 0) return 0; if(T->elements[2*n].koristeno == 1) return 2*n; else return 0; }//LeftCildB cvor RightChildB(cvor n, bt* T) {//desno dijete if(T->elements[n].koristeno == 0) return 0; if(T->elements[2*n+1].koristeno == 1) return 2*n+1; else return 0; }//RightCildB cvor ParentB(cvor n, bt* T) { if(n == 1) return 0; if(n%2) n--; return n/2; }//ParentB int LabelB(cvor n, bt* T) { return T->elements[n].label; }//LabelB void ChangeLabelB(int x, cvor n, bt* T) {//zamjena if(T->elements[n].koristeno == 0) return; T->elements[n].label = x; }//ChangeLabelB cvor RootB(bt* T) { if(T->elements[1].koristeno == 0) return 0; return 1; }//RootB void DeleteB(cvor n, bt* T) { T->elements[n].koristeno = 0; if (LeftChildB(n, T)) DeleteB(LeftChildB(n, T), T); if (RightChildB(n, T)) DeleteB(RightChildB(n, T), T); }//DeleteB //Implementacija binarnog (pokazivac) struct element { int label; element *left,*right; }; typedef element *cvor; typedef element bt; bt* InitB(int x, bt* T) {//inicijalizacija T = new element; T->label = x; T->left = NULL; T->right = NULL; return T; }//initB void CreateLeftB(int x, cvor n, bt* T) {//novi lijevi if(n->left) { cout << "Greska" << endl << endl; return; } cvor novi = new element; n->left = novi; novi->label = x; novi->left = NULL; novi->right = NULL; }//CreateLeftB void CreateRightB(int x, cvor n, bt* T) {//novi desni if(n->right) { cout << "Greska" << endl << endl; return; } cvor novi = new element; n->right = novi; novi->label = x; novi->left = NULL; novi->right = NULL; }//createRightB cvor ParentB(cvor n, bt* T) { if (n == T) return NULL; cvor roditelj = NULL; if (T->left) { if (T->left == n) return T; else roditelj = ParentB(n, T->left); } if(T->right) { if (T->right == n) return T; else roditelj = ParentB(n, T->right); } return roditelj; }//parentB int LabelB(cvor n, bt* T) {//vrati oznaku return n->label; }//labelB void ChangeLabelB(int x, cvor n, bt* T) { if(!n) return; n->label = x; }//changeLabelB cvor LeftChildB(cvor n, bt* T) {//lijevo dijete if(!n || !n->left) return NULL; return n->left; }//leftCildB cvor RightChildB(cvor n, bt* T) {//desno dijete if(!n || !n->right) return NULL; return n->right; }//rightCildB cvor RootB(bt* T) { if(!T) return NULL; return T; }//rootB void DeleteB(cvor n, bt* T) { static bool jednom = false; if(!jednom) { cvor roditelj = ParentB(n, T); if(roditelj->left == n) roditelj->left = NULL; else roditelj->right = NULL; jednom = true; } if(n->left) DeleteB(n->left, T); if(n->right) DeleteB(n->right, T); delete n; }//deleteB
Initial URL
Initial Description
Initial Title
Zadatak4StrukturePodataka
Initial Tags
Initial Language
C++