Return to Snippet

Revision: 38642
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
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++