Revision: 38577
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 5, 2011 07:34 by MonikaBistrovic
Initial Code
// polje.h
typedef int cijeli;
typedef int funkcija;
struct pom {
cijeli element;
cijeli iskoristen;
};
struct stablo_polje {
pom elementi[10000];
};
typedef stablo_polje bs;
typedef int cvor;
funkcija ParentB(cvor n,bs *stablo)
{
if (n==1)
{
return -1;
}
else if ((n%2)==0)
{
return n/2;
}
else
{
return (n-1)/2;
}
}
funkcija LeftChildB(cvor n,bs *stablo)
{
n=2*n;
if (stablo->elementi[n].iskoristen==0)
{
return -1;
}
else
return n;
}
funkcija RightChildB(cvor n,bs *stablo)
{
n=2*n+1;
if (stablo->elementi[n].iskoristen==0)
{
return -1;
}
else
return n;
}
cijeli LabelB(cvor n,bs *stablo)
{
return stablo->elementi[n].element;
}
void ChangeLabelB(cijeli x,cvor n,bs *stablo)
{
stablo->elementi[n].element=x;
}
funkcija RootB(bs stablo)
{
return 1;
}
void CreateLeftB(cijeli x,cvor n,bs *stablo)
{
n=n*2;
if (stablo->elementi[n].iskoristen)
{
cout<<"postoji ljevo dijete!!!!";
}
else
{
stablo->elementi[n].element=x;
stablo->elementi[n].iskoristen=1;
}
}
void CreateRightB(cijeli x,cvor n,bs *stablo)
{
n=n*2+1;
if (stablo->elementi[n].iskoristen)
{
cout<<"postoji desno dijete!!!!";
}
else
{
stablo->elementi[n].element=x;
stablo->elementi[n].iskoristen=1;
}
}
void DeleteB(cvor n,bs *stablo)
{
cijeli i=n*2,j=n*2+1;
if (stablo->elementi[i].iskoristen)
DeleteB (i,stablo);
if (stablo->elementi[j].iskoristen)
DeleteB (j,stablo);
stablo->elementi[n].iskoristen=0;
}
void InitB(cijeli x,bs *stablo)
{
for (cijeli i=0;i<9999;i++)
stablo->elementi[i].iskoristen=0;
stablo->elementi[1].iskoristen=1;
stablo->elementi[1].element=x;
}
//main polje
#include <iostream>
using namespace std;
#include "polja.h"
int main()
{
cijeli x,j;
bs stablo;
InitB(2,&stablo);
//dodavanje startnog lijevog djeteta
cout << "Kreiram lijevo pocetno stablo sa vrijednoscu 22" <<endl;
CreateLeftB(22,1,&stablo);
cout << "Brisem korijen na lokaciji 1" <<endl;
DeleteB(1,&stablo );
//generiranje ostatka stabla brojeva, koristenje ostalih imoplementiranih funkcija
for (int i=1;i<10;i++)
{
x=rand()%100;
j=1;
do
{
if (LabelB(j,&stablo)>=x)
{
if (LeftChildB(j,&stablo)==-1)
{
CreateLeftB(x,j,&stablo);
cout<<"ljevo "<<x;
break;
}
else
{
j=j*2;
cout<<"ljevo ";
}
}
else if(LabelB(j,&stablo)<x)
{
if (RightChildB(j,&stablo)==-1)
{
CreateRightB(x,j,&stablo);
cout<<"desno "<<x;
break;
}
else
{
j=j*2+1;
cout<<"desno ";
}
}
}while(1);
}
int a;
cin >> a;
return 0;
}
// pokazivaci.h
typedef int cijeli;
struct stablo_pok {
cijeli element;
struct stablo_pok *ljevo,*desno;
};
typedef stablo_pok *funkcija;
typedef stablo_pok *cvor;
typedef stablo_pok bs;
funkcija ParentB(cvor n,bs *stablo)
{
static bs *trazeni=n;
bs *i;
if (stablo->ljevo!=NULL)
{
if (stablo->ljevo==n)
return stablo;
else
i=ParentB(trazeni,stablo->ljevo);
}
else
{
if (stablo->desno!=NULL)
{
if (stablo->desno==n)
return stablo;
else
i=ParentB(trazeni,stablo->desno);
}
}
return i;
}
funkcija LeftChildB(bs *stablo)
{
return stablo->ljevo;
}
funkcija RightChildB(bs *stablo)
{
return stablo->desno;
}
cijeli LabelB(bs *stablo)
{
return stablo->element;
}
void ChangeLabelB(cijeli x,bs *stablo)
{
stablo->element=x;
}
funkcija RootB(bs *stablo)
{
return stablo;
}
void CreateLeftB(cijeli x,bs *stablo)
{
if (stablo->ljevo!=NULL)
cout<<"postoji ljevo djete!!";
else
{
bs *novi=new bs;
novi->element=x;
stablo->ljevo=novi;
novi->desno=NULL;
novi->ljevo=NULL;
}
}
void CreateRightB(cijeli x,bs *stablo)
{
if (stablo->desno!=NULL)
cout<<"postoji desno djete!!";
else
{
bs *novi=new bs;
novi->element=x;
stablo->desno=novi;
novi->desno=NULL;
novi->ljevo=NULL;
}
}
void DeleteB(bs *stablo)
{
if (stablo->ljevo!=NULL)
DeleteB(stablo->ljevo);
if (stablo->desno!=NULL)
DeleteB(stablo->desno);
delete stablo;
}
void InitB(cijeli x,bs *stablo)
{
stablo->element=x;
stablo->ljevo=NULL;
stablo->desno=NULL;
}
// pokazivaci main
#include <iostream>
using namespace std;
#include "pokazivaci.h"
int main()
{
bs stablo;
cout << "Inicijaliziram korijen" <<endl;
InitB(2,&stablo);
CreateLeftB(22,&stablo);
CreateRightB(23,&stablo);
cout << "Lijevi korijen: " << LeftChildB(&stablo)->element <<endl;
cout << "Desni korijen: " << RightChildB(&stablo)->element <<endl;
cout << "Labela korijena: " << LabelB(&stablo) <<endl;
cout << "Brisem korijen" <<endl;
DeleteB(&stablo );
int a;
cin>>a;
return 0;
}
Initial URL
Initial Description
Initial Title
Strukture podataka zadatak 4
Initial Tags
Initial Language
C++