Binarno stablo

poruka: 8
|
čitano: 4.391
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Binarno stablo

Pozz

 

Evo ako mi moze netko pomoc, naime imam zadatak za rješit riječ je Iplementacija Binarnog Stabla kao Bazu za upis Radnika.

 

Sada ja sam to pokusavao tj. napravit strukturu koja ce mi sadrzat Radnika njegovo ime, god, placa i dva pokazivaca lijevo i desno. Ove pokazivace sam stavio radi toga sta u binarnom stablu svaki "roditelj" moze imat dvoje "djece".

 

OVo je moj kod

 

Sad neznam kako sad upisivat novog radnika u to stablo tj. bazu, a da ovaj prosli ostane zapamcen ?

 

 

 

 

#include <iostream>


using namespace std;

struct radnik
{

    char ime_radnika;
    int god_radnika;
    float placa;
    radnik *lijevo;
    radnik *desno;
   

};

void dodaj_radnika_u_bazu()
{
    radnik novi_radnik;
    radnik *baza;
    baza=NULL;

    cout<<"Unesi Ime radnika:"<<endl;
    cin>>novi_radnik.ime_radnika;
    cout<<"Unesi godine radnika:"<<endl;
    cin>>novi_radnik.god_radnika ;
    cout<<"Unesi placu radnika:"<<endl;
    cin>>novi_radnik.placa ;
   
   
   
}

void main ()
{
    char odg;

    do
    {
       cout<<"Zelite li unijeti novog radnika (d/n) ?"<<endl;
       cin>>odg;
   
    if (odg=='d')
    {
       dodaj_radnika_u_bazu();
    }
    else
    {
    }
    }
    while(odg=='d');

}

 
0 0 hvala 0
16 godina
offline
Re: Binarno stablo

Ja bih u strukturu stavio i pointer na roditelja, to može dosta olakšati kretanje po bazi. A cijelo stablo čuvaš kao pointer na korijen stabla (njemu je roditelj NULL), i kad ubacuješ novog krećeš se po stablu dok ne nađeš slobodno mjesto.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Binarno stablo

Kako da zapamtim da mi je prvi radnik kojem sam upisa ime, god i placu jedan roditelj, mislim nakon onoga kad upisem ime, god i placu ja sad moram to spremit pod nekim roditeljima, a neznam kako ?

 
0 0 hvala 0
16 godina
offline
Re: Binarno stablo
CipiCips kaže...

Kako da zapamtim da mi je prvi radnik kojem sam upisa ime, god i placu jedan roditelj, mislim nakon onoga kad upisem ime, god i placu ja sad moram to spremit pod nekim roditeljima, a neznam kako ?

 

Jesi li proučio stabla i na koji način funkcioniraju? O njima ima riječi TU, a nešto o implementaciji pomoću pointera imaš na stranici 28. Tamo je i slika koja to lijepo pokazuje. Upravo pointeri služe povezivanju svih struktura u jednu cjelinu.

http://manutd-croatia.com/forum/index.php ... forum i udruga navijača Manchester Uniteda...
14 godina
neaktivan
offline
Binarno stablo

U stablo unosiš po "ključu" (hash, šifra.. ) tako da elemente koji imaju ključ veći od korijenskog dodaješ u desno podstablo, a oni manji u lijevo podstablo. Ne smiju biti dva ista ključa. Dobru vizualizaciju imašovdje (samo pod options isključi AVL Balanced)

 

U strukturu dodaj i šifru radnika po kojoj najlakše možeš razlikovati jednog radnika od drugog

radnik *dodajNovi(radnik *baza, char *nIme, float nPlaca, int nGod, int nSifra )
{

    if (baza == NULL)

    {

        radnik *novi = new radnik;

        if (novi != NULL)

       {

          strcpy(novi->ime_radnika, nIme);

          novi->placa = nPlaca;

          novi->god_radnika = nGod;

          novi->sifra = nSifra;

         baza = novi;

        }

        else

        {

        cout << "Greska pri alokaciji memorije" << endl;

        return NULL;

        }

      }
      else if (nSifra > baza->sifra) //ako je sifra novog radnika veca od sifre trenutnog radnika u stablu, novi dodajemo u desno podstablo

      {

       baza->desno = dodajNovi (baza->desno, nIme, nPlaca, nGod, int nSifra)

       } 

       else if (nSifra < baza->sifra) //ako je sifra novog radnika manja od sifre trenutnog radnika u stablu, novi dodajemo u lijevo podstablo

       {

       baza->lijevo= dodajNovi (baza->lijevo, nIme, nPlaca, nGod, int nSifra)

       }

       else

       {

       cout << "Radnik s sifrom " << nSifra << " vec postoji u bazi!" << endl;

       return NULL;

       }

       return baza;

 

 

Edit: ovaj bugov tekst editor je gadan za pisanje kôda, trebalo bi nešto poduzeti oko toga.

Poruka je uređivana zadnji put čet 30.6.2011 1:29 (BassMan).
 
0 0 hvala 0
14 godina
neaktivan
offline
Binarno stablo

Pozz evo napravio sam kod za binarno stablo tj. za upis elementa u stablo, te ispusje INORDER te elemente, samo ima par problema, a to je kada upisujem vise od 5-6 elemenata program zabloka, pomoc ?

 

 

 

#include <iostream>

using namespace std;

struct telement
{
    int broj;
    telement *lijevo;
    telement *desno;
}
;



void dodaj_element_u_stablo(

telement*stablo, int broj)
{
    telement *zadnji, *novi;
    int dalje=1;
    zadnji=stablo;
    do
    {
       if(broj>zadnji->broj)
       {
          if(zadnji->desno !=NULL)
          {
             zadnji=zadnji->desno;
          }
          else
          {
             novi=new telement;
             zadnji->desno =novi
                ;
             novi->broj =broj;
             novi->lijevo =NULL;
             novi->desno =NULL;
             dalje=0;
          }//if
       }//if
       else
       {
          if(zadnji->lijevo !=NULL)
          {
             zadnji=zadnji->lijevo;
          }
          else
             novi=new telement;
          zadnji->lijevo =novi;
          novi->broj =broj;
          novi->lijevo =NULL;
          novi->desno =NULL;
          dalje=0;
       }//if
    }
    while (dalje==1);
}
void print_inorder(element *stablo)
{
if (stablo!=NULL)
{
print_inorder(stablo->lijevo);
cout<<" "<<stablo->broj;
print_inorder(stablo->desno);
}
void main ()
{
    int broj;
    char odg;
    telement *stablo = new telement;
    stablo->lijevo=NULL;
    stablo->desno=NULL;
    do
    {
       cout<<"Unesi broj cvora: "; cin>>broj;
       dodaj_element_u_stablo(stablo, broj);
       cout<<"Zelite li dodati novi cvor (d/n)? ";
       cin>>odg;
    }
    while(odg=='d');
      print_inorder(stablo);

}
 
0 0 hvala 0
12 godina
neaktivan
offline
Binarno stablo

Može li mi netko molim vas reći kako kreirati binarno stablo zadano u preorder obilasku.. ili barem neki hint.. pokušavam već duže vrijeme i ne ide :/

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Binarno stablo
Luuka kaže...
CipiCips kaže...

Kako da zapamtim da mi je prvi radnik kojem sam upisa ime, god i placu jedan roditelj, mislim nakon onoga kad upisem ime, god i placu ja sad moram to spremit pod nekim roditeljima, a neznam kako ?

 

Jesi li proučio stabla i na koji način funkcioniraju? O njima ima riječi TU, a nešto o implementaciji pomoću pointera imaš na stranici 28. Tamo je i slika koja to lijepo pokazuje. Upravo pointeri služe povezivanju svih struktura u jednu cjelinu.

 

Hvala ti za ovu skriptu, baš mi je tako nešto trebalo. Još na hrvatskome. Fenomenalno.

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice