Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

2.domaća zadaća
WWW:
Idite na 1, 2, 3, 4, 5, 6, 7, 8  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 12:51 čet, 6. 1. 2011    Naslov: 2.domaća zadaća Citirajte i odgovorite

trebam implementirati a.t.p MULTISKUP pomoću sortirane vezane liste,gdje svaka ćelija liste sadrži i podatak o broju pojavljivanja danog elementa u skupu. veze su pomoću kursora.
Jesam li dobro deklarirala Multiskup kao struct, i zašto mi BubbleSort ne radi? edit:
rješila sam BubbleSort,sada je sve ok! jedino još ova impl.pomoću kursora..
[code:1]#define N 1000
typedef char elementtype;

typedef struct {
elementtype element;
int koliko;
int next;
}MULTISET;

void BubbleSort(char c[]){
int i,j;
int n=strlen(c);
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if((strcmp(c[j+1],c[j])<0)
swap(&c[j],&c[j+1]);
}

void swap(char *x, char *y){
char tmp;
tmp=*x;
*x=*y;
*y=tmp;
}


...
BubbleSort(a);
...
[/code:1]

javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.
pretp.da ima veze s pointerima,s kojima sam na vi..

još mi nije jasno, kako ću se "kretati" po listi? sa pointerima smo imali npr.[code:1]for (pom = f i r s t ; pom; pom = pom−>next )[/code:1], pa kako bi bilo sa kursorima,nemam ideje..


edit:sada vidim da smo na vježbama ovako radili:
[code:1]struct celltype{
elementtype element;
int koliko;
int next;
} MULTISET[N];
[/code:1]
trebam li tako deklarirati multiskup?ili? buni me što tu imamo polje..
trebam implementirati a.t.p MULTISKUP pomoću sortirane vezane liste,gdje svaka ćelija liste sadrži i podatak o broju pojavljivanja danog elementa u skupu. veze su pomoću kursora.
Jesam li dobro deklarirala Multiskup kao struct, i zašto mi BubbleSort ne radi? edit:
rješila sam BubbleSort,sada je sve ok! jedino još ova impl.pomoću kursora..
Kod:
#define N 1000
typedef char elementtype;

typedef struct {
        elementtype element;
        int koliko;
        int next;
}MULTISET;

void BubbleSort(char c[]){
     int i,j;
     int n=strlen(c);
     for(i=0;i<n-1;i++)
         for(j=0;j<n-1-i;j++)
             if((strcmp(c[j+1],c[j])<0)
                swap(&c[j],&c[j+1]);
}

void swap(char *x, char *y){
     char tmp;
     tmp=*x;
     *x=*y;
     *y=tmp;
}


...
BubbleSort(a);
...


javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.
pretp.da ima veze s pointerima,s kojima sam na vi..

još mi nije jasno, kako ću se "kretati" po listi? sa pointerima smo imali npr.
Kod:
for (pom = f i r s t ; pom; pom = pom−>next )
, pa kako bi bilo sa kursorima,nemam ideje..


edit:sada vidim da smo na vježbama ovako radili:
Kod:
struct celltype{
elementtype element;
int  koliko;
int next;
} MULTISET[N];

trebam li tako deklarirati multiskup?ili? buni me što tu imamo polje..


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pmli
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 11. 2009. (12:03:05)
Postovi: (2C8)16
Spol: muško
Sarma = la pohva - posuda
197 = 203 - 6

PostPostano: 14:46 čet, 6. 1. 2011    Naslov: Citirajte i odgovorite

[quote=".anchy."]javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.[/quote]
strcmp služi za uspoređivanje stringova, ne znakova. Ne vidim zašto bi se bunio kod poziva swapa.

Što se tiče kursora, možda ti pomogne [url=http://www.ilijapavlic.com/spa/Skripta.pdf]skripta[/url] (str. 15).
.anchy. (napisa):
javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.

strcmp služi za uspoređivanje stringova, ne znakova. Ne vidim zašto bi se bunio kod poziva swapa.

Što se tiče kursora, možda ti pomogne skripta (str. 15).


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 14:59 čet, 6. 1. 2011    Naslov: Citirajte i odgovorite

vidjela sam to u skripti,ali mi još uvijek nije jasno..

promjenila sam ovo:
[code:1]typedef struct {
elementtype element;
int koliko;
int next;
}MULTISET[N];[/code:1]

i tada deklarirala liste kao:
[code:1]MULTISET avail, A, B;[/code:1]
je li to dobro?

sada mi je sve avail,pa sam napravila for petlju:
[code:1]for(i=0;i<N;i++) avail.next=i+1;[/code:1]
ali mi javlja grešku za to..
vidjela sam to u skripti,ali mi još uvijek nije jasno..

promjenila sam ovo:
Kod:
typedef struct {
        elementtype element;
        int koliko;
        int next;
}MULTISET[N];


i tada deklarirala liste kao:
Kod:
MULTISET avail, A, B;

je li to dobro?

sada mi je sve avail,pa sam napravila for petlju:
Kod:
for(i=0;i<N;i++) avail.next=i+1;

ali mi javlja grešku za to..


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pmli
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 11. 2009. (12:03:05)
Postovi: (2C8)16
Spol: muško
Sarma = la pohva - posuda
197 = 203 - 6

PostPostano: 15:07 čet, 6. 1. 2011    Naslov: Citirajte i odgovorite

[quote=".anchy."]i tada deklarirala liste kao:
[code:1]MULTISET avail, A, B;[/code:1]
je li to dobro?[/quote]
Ne. Ideja je da imaš jedno veliko polje SPACE i da se u njemu nalazi avail, A, B i ostalo. MULTISET ti je onda kursor na header (int). SPACE deklariraš kao polje sa svim potrebnim.

[quote=".anchy."]sada mi je sve avail,pa sam napravila for petlju:
[code:1]for(i=0;i<N;i++) avail.next=i+1;[/code:1]
ali mi javlja grešku za to..[/quote]
Trebaš paziti što ti je oznaka za kraj liste, tj. jesu li to samo negativni brojevi i/ili brojevi veći od N-1.
I naravno, to treba raditi na polju SPACE. avail, A i B trebaju biti int-ovi.
.anchy. (napisa):
i tada deklarirala liste kao:
Kod:
MULTISET avail, A, B;

je li to dobro?

Ne. Ideja je da imaš jedno veliko polje SPACE i da se u njemu nalazi avail, A, B i ostalo. MULTISET ti je onda kursor na header (int). SPACE deklariraš kao polje sa svim potrebnim.

.anchy. (napisa):
sada mi je sve avail,pa sam napravila for petlju:
Kod:
for(i=0;i<N;i++) avail.next=i+1;

ali mi javlja grešku za to..

Trebaš paziti što ti je oznaka za kraj liste, tj. jesu li to samo negativni brojevi i/ili brojevi veći od N-1.
I naravno, to treba raditi na polju SPACE. avail, A i B trebaju biti int-ovi.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 16:30 čet, 6. 1. 2011    Naslov: Citirajte i odgovorite

opet ne kužim :(
sada sam napravila ovako pa kaže" expected primary-expression before '[' token "
[code:1]for(i=0;i<N-1;i++)
SPACE[i]->next=i+1;
avail=SPACE[0].next;
SPACE[N-1]=-1;[/code:1]
opet ne kužim Sad
sada sam napravila ovako pa kaže" expected primary-expression before '[' token "
Kod:
for(i=0;i<N-1;i++)
       SPACE[i]->next=i+1;
    avail=SPACE[0].next;
    SPACE[N-1]=-1;


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pmli
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 11. 2009. (12:03:05)
Postovi: (2C8)16
Spol: muško
Sarma = la pohva - posuda
197 = 203 - 6

PostPostano: 16:55 čet, 6. 1. 2011    Naslov: Citirajte i odgovorite

[quote=".anchy."][code:1] SPACE[i]->next=i+1;[/code:1][/quote]
Treba biti točka, ne strelica.

[quote=".anchy."][code:1] avail=SPACE[0].next;[/code:1][/quote]
Valjda treba biti avail = 0;
.anchy. (napisa):
Kod:
       SPACE[i]->next=i+1;

Treba biti točka, ne strelica.

.anchy. (napisa):
Kod:
    avail=SPACE[0].next;

Valjda treba biti avail = 0;


[Vrh]
Korisnički profil Pošaljite privatnu poruku
kakt00s
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 17. 10. 2007. (12:19:40)
Postovi: (183)16
Spol: muško
Sarma = la pohva - posuda
33 = 43 - 10
Lokacija: :ɐɾıɔɐʞoן

PostPostano: 17:30 pet, 7. 1. 2011    Naslov: Citirajte i odgovorite

Moram implementirat atp [b]MAPPING[/b] pomoću [b]otvorene hash tablice[/b] i muči me f-ja MAKE_NULL. Evo kod koji sam napisao...

[code:1]void MAKE_NULL(MAPPING *M){
int i;
for(i=0;i<B;i++) (*M)[i]= NULL;
}[/code:1]

Čim program dođe do trenutka izvođenja te f-je se 'blokira'... :(


EDIT: [b]Solved[/b]. Zaboravio alocirati memoriju :)
Moram implementirat atp MAPPING pomoću otvorene hash tablice i muči me f-ja MAKE_NULL. Evo kod koji sam napisao...

Kod:
void MAKE_NULL(MAPPING *M){
    int i;
    for(i=0;i<B;i++) (*M)[i]= NULL;
}


Čim program dođe do trenutka izvođenja te f-je se 'blokira'... Sad


EDIT: Solved. Zaboravio alocirati memoriju Smile



_________________
Muy importante!
[Vrh]
Korisnički profil Pošaljite privatnu poruku
kakt00s
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 17. 10. 2007. (12:19:40)
Postovi: (183)16
Spol: muško
Sarma = la pohva - posuda
33 = 43 - 10
Lokacija: :ɐɾıɔɐʞoן

PostPostano: 21:37 pet, 7. 1. 2011    Naslov: Citirajte i odgovorite

[i]Implementirajte a.t.p. MAPPING pomoću otvorenog hashiranja sa B pretinaca (sami predložite funkciju hashiranja). Elementi domene su uredjeni parovi oblika (a, b), za a, b∈{0, 1, 2, …, n}. Kodomena je skup {0, 1, 2, …, n}. [/i]

Zezam se sa tom domenom. Kako da to rješim?
Prvo sam mislio napravit strukturu unutar strukture, ali ipak nebi. :)
E sad... ako napravim domenu kao polje od 2 člana, onda mi implementacije neće biti točne.

Može neki hint/ideja?

EDIT: [b]Solved[/b] Struktura unutar strukture...P.S. Baš je divlji ovaj rumfo :D
Implementirajte a.t.p. MAPPING pomoću otvorenog hashiranja sa B pretinaca (sami predložite funkciju hashiranja). Elementi domene su uredjeni parovi oblika (a, b), za a, b∈{0, 1, 2, …, n}. Kodomena je skup {0, 1, 2, …, n}.

Zezam se sa tom domenom. Kako da to rješim?
Prvo sam mislio napravit strukturu unutar strukture, ali ipak nebi. Smile
E sad... ako napravim domenu kao polje od 2 člana, onda mi implementacije neće biti točne.

Može neki hint/ideja?

EDIT: Solved Struktura unutar strukture...P.S. Baš je divlji ovaj rumfo Very Happy



_________________
Muy importante!


Zadnja promjena: kakt00s; 17:39 uto, 11. 1. 2011; ukupno mijenjano 1 put.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Tomy007
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 11. 2009. (19:45:28)
Postovi: (94)16
Sarma = la pohva - posuda
-2 = 4 - 6

PostPostano: 17:20 sub, 8. 1. 2011    Naslov: Citirajte i odgovorite

[code:1]
#include <stdio.h>
#include <stdlib.h>

#define MAXN 1000
#define LAMBDA -1
#define PRAZNO '-'

typedef char labeltype
typedef int node;
typedef node TREE;

typedef struct {
labeltype label;
node parent, first_child, next_sibling;
}SPACE [MAXN]

void MAKE_NULL(int n) {
node avail;
for (i=n, i<MAXN, i++) {
SPACE[I].label=PRAZNO;
SPACE[i].next_sibling=i+1;
SPACE[MAXN].next_sibling=LAMBDA;
avail=n;
}

node MAKE_ROOT(labeltype l, TREE *T) {
if (avail==LAMBDA){
printf("Polje SPACE je puno!");
system("pause");
exit(1);
}
T=avail
avail=SPACE[avail].next_sibling;
SPACE[T].label=l;
SPACE[T].parent=LAMBDA;
SPACE[T].first_child=LAMBDA
SPACE[T].next_sibling=LAMBDA
return T;
}

node INSERT_CHILD(labeltype l, node i, TREE *T) {
node j;
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
if (avail==LAMBDA){
printf("Polje SPACE je puno!");
system("pause");
exit(1);
}
j=avail;
avail=SPACE[avail].next_sibling;

SPACE[j].parent=i;
SPACE[j].first_child=LAMBDA;
SPACE[j].next_sibling=SPACE[i].first_child;

SPACE[i].first_child=j;
return j;
}

node INSERT_SIBLING(labeltype l, node i, TREE *T) {
node j,t;
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
if (avail==LAMBDA){
printf("Polje SPACE je puno!");
system("pause");
exit(1);
}

j=avail;
avail=SPACE[avail].next_sibling;

SPACE[j].next_sibling=SPACE[i].next_sibling;
SPACE[j].parent=SPACE[i].parent;
SPACE[j].first_child=LAMBDA;

SPACE[i].next_sibling=j;
return j;
}

void DELETE(node i, TREE *T) {
node j,k,g;
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}

if (SPACE[i].parent==LAMBDA) {
printf("Taj cvor je korijen!");
system("pause");
exit(1);
}

if (SPACE[i].first_child!=LAMBDA) {
printf("Taj cvor ima djece!");
system("pause");
exit(1);
}

j=SPACE[i].parent;
k=SPACE[i].next_sibling;
g=SPACE[j].first_child;



if (g!=i) {
while (SPACE[g].next_sibling!=i)
g=SPACE[g].next_sibling;
}

if (i==SPACE[j].first_child)
SPACE[j].first_child=k;
else
SPACE[g].next_sibling=k;

SPACE[i].label=PRAZNO;
SPACE[i].next_sibling=avail;
avail=i;
}

node ROOT(TREE T) {
return T;
}

node FIRST_CHILD(node i; TREE T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
return SPACE[i].first_child;
}

node NEXT_SIBLING(node i; TREE T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
return SPACE[i].next_sibling;
}

node PARENT(node i; TREE T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
return SPACE[i].parent;
}

labeltype LABEL(node i; TREE T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
return SPACE[i].label;
}

void CHANGE_LABEL(labeltype l, node i; TREE *T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
SPACE[i].label=l;
}


int main (void) {
TREE T;
MAKE_NULL(0);



system("pause");
return 0;
}
[/code:1]

PITANJA:

1. Bili ovo bila dobra implementacija za TREE pomoću polja na osnovi veze "čvor → (roditelj, (prvo dijete, idući brat))" ili sam nešto krivo razunio/kodirao (ako nešto nije u redu bio bi jako zahvalan da mi ukažete što je krivo i date mi neku ideju kako da to ispravim)

2.Sa komentarom /* ? */ sam označio mjesto u kodu gdje sam iskodirao samo za jednu stablo. Ako je label = '-' onda je u listi avail ako nije onda je sigurno u tom jedinom stablo. Zna li netko kako bi taj problem riješio univerzalno tj. da vrijedi i za više stabala u polju SPACE (znaći da provjerim jeli taj i baš u tom konkretnom stablu)?

3.Kako bi mogao učitati stablo izvana u program. Jedna moja zamisao je bila da se prvo napiše korijen pa onda njegova djeca, a poslje zadnjeg djeteta znak '-'. Nakon toga bi to ponavio za njegovo prvo dijete, pa svako sljedeće i tako u krug dok se ne upiše znak '*' što bi značilo da je cijelo stablo učitano ali nisam siguran bili to bilo ok i kako bi to izveo.

Hvala puno svima koji pokušaju bar nešto od ovoga odgovoriti jer sam malo u stisci s vremenom, a i zato jer je ovo gradivo obrađeno samo apstraktno i nismo radili nikakve konkretnije primjere sa npr. konstruiranjem liste avail ali ni sa večinom implementacija drugih funkcija u ovom obliku sa poljem za obično stablo, a nismo radili ni učitavanje običnog stabla izvana.
Kod:

#include <stdio.h>
#include <stdlib.h>

#define MAXN 1000
#define LAMBDA -1
#define PRAZNO '-'

typedef char labeltype
typedef int node;
typedef node TREE;

typedef struct {
        labeltype label;
        node parent, first_child, next_sibling;
        }SPACE [MAXN]
       
void MAKE_NULL(int n) {
    node avail;
    for (i=n, i<MAXN, i++) {
        SPACE[I].label=PRAZNO;
        SPACE[i].next_sibling=i+1;
    SPACE[MAXN].next_sibling=LAMBDA;
    avail=n;
}

node MAKE_ROOT(labeltype l, TREE *T) {
     if (avail==LAMBDA){
        printf("Polje SPACE je puno!");
        system("pause");
        exit(1);
        }
     T=avail
     avail=SPACE[avail].next_sibling;
     SPACE[T].label=l;
     SPACE[T].parent=LAMBDA;
     SPACE[T].first_child=LAMBDA
     SPACE[T].next_sibling=LAMBDA
     return T;
     }
     
node INSERT_CHILD(labeltype l, node i, TREE *T) {
     node j;
     if (SPACE[i].label==PRAZNO) {                  /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        }
     if (avail==LAMBDA){
        printf("Polje SPACE je puno!");
        system("pause");
        exit(1);
        }
     j=avail;
     avail=SPACE[avail].next_sibling;
     
     SPACE[j].parent=i;
     SPACE[j].first_child=LAMBDA;
     SPACE[j].next_sibling=SPACE[i].first_child;
     
     SPACE[i].first_child=j; 
     return j;
     }
     
node INSERT_SIBLING(labeltype l, node i, TREE *T) {
     node j,t;
     if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        }
     if (avail==LAMBDA){
        printf("Polje SPACE je puno!");
        system("pause");
        exit(1);
        } 
     
      j=avail;
      avail=SPACE[avail].next_sibling;
     
      SPACE[j].next_sibling=SPACE[i].next_sibling;
      SPACE[j].parent=SPACE[i].parent;
      SPACE[j].first_child=LAMBDA;
     
      SPACE[i].next_sibling=j;
      return j;
      }
     
void DELETE(node i, TREE *T) {
        node j,k,g;
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        }
       
        if (SPACE[i].parent==LAMBDA) {     
        printf("Taj cvor je korijen!");
        system("pause");
        exit(1);
        }         
         
        if (SPACE[i].first_child!=LAMBDA) {     
        printf("Taj cvor ima djece!");
        system("pause");
        exit(1);
        }             
       
        j=SPACE[i].parent;
        k=SPACE[i].next_sibling;
        g=SPACE[j].first_child;
       
       
       
        if (g!=i) {
           while (SPACE[g].next_sibling!=i)
                 g=SPACE[g].next_sibling;
                 }
             
        if (i==SPACE[j].first_child)
           SPACE[j].first_child=k;
        else
            SPACE[g].next_sibling=k;
           
        SPACE[i].label=PRAZNO;
        SPACE[i].next_sibling=avail;
        avail=i;   
        }
       
node ROOT(TREE T) {
     return T;
     }
     
node FIRST_CHILD(node i; TREE T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        return  SPACE[i].first_child;             
        }
       
node NEXT_SIBLING(node i; TREE T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        return  SPACE[i].next_sibling;             
        }
       
node PARENT(node i; TREE T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        return  SPACE[i].parent;             
        } 
       
labeltype LABEL(node i; TREE T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        return  SPACE[i].label;             
        } 
       
void CHANGE_LABEL(labeltype l, node i; TREE *T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        SPACE[i].label=l;             
        }                               
             

int main (void) {
    TREE T;
    MAKE_NULL(0);
   
   
   
    system("pause");
    return 0;
}


PITANJA:

1. Bili ovo bila dobra implementacija za TREE pomoću polja na osnovi veze "čvor → (roditelj, (prvo dijete, idući brat))" ili sam nešto krivo razunio/kodirao (ako nešto nije u redu bio bi jako zahvalan da mi ukažete što je krivo i date mi neku ideju kako da to ispravim)

2.Sa komentarom /* ? */ sam označio mjesto u kodu gdje sam iskodirao samo za jednu stablo. Ako je label = '-' onda je u listi avail ako nije onda je sigurno u tom jedinom stablo. Zna li netko kako bi taj problem riješio univerzalno tj. da vrijedi i za više stabala u polju SPACE (znaći da provjerim jeli taj i baš u tom konkretnom stablu)?

3.Kako bi mogao učitati stablo izvana u program. Jedna moja zamisao je bila da se prvo napiše korijen pa onda njegova djeca, a poslje zadnjeg djeteta znak '-'. Nakon toga bi to ponavio za njegovo prvo dijete, pa svako sljedeće i tako u krug dok se ne upiše znak '*' što bi značilo da je cijelo stablo učitano ali nisam siguran bili to bilo ok i kako bi to izveo.

Hvala puno svima koji pokušaju bar nešto od ovoga odgovoriti jer sam malo u stisci s vremenom, a i zato jer je ovo gradivo obrađeno samo apstraktno i nismo radili nikakve konkretnije primjere sa npr. konstruiranjem liste avail ali ni sa večinom implementacija drugih funkcija u ovom obliku sa poljem za obično stablo, a nismo radili ni učitavanje običnog stabla izvana.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
homesweethome
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 10. 2009. (16:25:25)
Postovi: (1C)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 16:29 pon, 10. 1. 2011    Naslov: Citirajte i odgovorite

:arrow: Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji.. :?:
Arrow Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji.. Question


[Vrh]
Korisnički profil Pošaljite privatnu poruku
ante003
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 10. 2008. (17:45:10)
Postovi: (3C5)16
Spol: muško
Sarma = la pohva - posuda
24 = 71 - 47

PostPostano: 19:38 pon, 10. 1. 2011    Naslov: Citirajte i odgovorite

[quote="homesweethome"]:arrow: Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji.. :?:[/quote]

:S

napravi si funkciju void inorder i samo napisi kako ti ide definicija inorder ispisa.

lijevo podstablo, korijen, desno podstablo.

najlaksa rekurzivna funkcija koju mozes pitat.

[code:1]inorder(LEFT_CHILD(..),...);
printf("..",korijen);
inorder(RIGHT_CHILD(..),...);
[/code:1]

i jos si dodaj jedan if koji provjerava jel postoji nesto na tom cvoru i voila. to je to :) (ako nisam nesto zaboravio, ako jesam, skuzit ces valjda sto fali :) )
homesweethome (napisa):
Arrow Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji.. Question


:S

napravi si funkciju void inorder i samo napisi kako ti ide definicija inorder ispisa.

lijevo podstablo, korijen, desno podstablo.

najlaksa rekurzivna funkcija koju mozes pitat.

Kod:
inorder(LEFT_CHILD(..),...);
printf("..",korijen);
inorder(RIGHT_CHILD(..),...);


i jos si dodaj jedan if koji provjerava jel postoji nesto na tom cvoru i voila. to je to Smile (ako nisam nesto zaboravio, ako jesam, skuzit ces valjda sto fali Smile )



_________________
Ako ste previše otvorenog uma, ispast će vam mozak
------------------------------------------------------
Racunalo bez Windowsa je kao riba bez bicikla
[Vrh]
Korisnički profil Pošaljite privatnu poruku
c.p.-23
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 04. 06. 2010. (10:21:02)
Postovi: (8)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 21:29 uto, 11. 1. 2011    Naslov: Citirajte i odgovorite

ima li itko živ implementaciju:
a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
:cry: :oops:
ima li itko živ implementaciju:
a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
Crying or Very sad Embarassed


[Vrh]
Korisnički profil Pošaljite privatnu poruku
eve
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 07. 2009. (23:07:06)
Postovi: (192)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
-21 = 37 - 58

PostPostano: 22:05 uto, 11. 1. 2011    Naslov: Citirajte i odgovorite

jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?

muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
plizz help ak neko to ima...
jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?

muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
plizz help ak neko to ima...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Cobs
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15)
Postovi: (206)16
Spol: muško
Sarma = la pohva - posuda
26 = 40 - 14
Lokacija: Geto

PostPostano: 19:03 sri, 12. 1. 2011    Naslov: Citirajte i odgovorite

[quote="c.p.-23"]ima li itko živ implementaciju:
a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
:cry: :oops:[/quote]

s obzirom da se radi o implementaciji pomoću nesortirane vezane liste ( implementirane pomoću pointera ) ta lista ne treba biti SORTIRANA , pa po čemu se to razlikuje od obične liste ( implementirane pomoću pointera ).

Ne razlikuje se. Nabavi običnu implementaciju liste pomoću pointera, tog bar ima na internetu na 100 strana.

znači umjesto onog position pointera koji je tam u svakoj funkciji oznaka koji element ubacit,brisat..., sam stavi pointer na prvi element liste. Jer ti pozicija u skupu nije bitna.

Funkcija MAKE_NULL je ista.
Kod funkcije INSERT uvijek ubacuj elemente na početak liste.
Kod funkcije DELETE šećeš po listi od početka dok ne naletiš na neki element ( koji je tamo jedini jer se radi o skupu ) i pobrišeš ga.
Funkcija MEMBER je gotovo ista kao DELETE, sam ne brišeš podatak na koji eventualno naletiš.
Funkcija MIN ( MAX ). Šećeš po cijeloj listi i najveći ( najmanji ) element spremiš u pomoćnu varijablu koju ćeš vratiti.

Ostale funkcije su niš drugo nego kombinacija navedenih.

[quote="eve"]
jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?

muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
plizz help ak neko to ima...
[/quote]

si ovo stavila?

[code:1]#define B 20[/code:1]

ak je u nečem drugom problem napiši tu u čem ili meni na pm.

[size=9][color=#999999]Added after 32 minutes:[/color][/size]

[quote="Tomy007"][code:1]
...
typedef struct {
labeltype label;
node parent, first_child, next_sibling;
}SPACE [MAXN]

void MAKE_NULL(int n) {
node avail;
for (i=n, i<MAXN, i++) {
SPACE[I].label=PRAZNO;
SPACE[i].next_sibling=i+1;
SPACE[MAXN].next_sibling=LAMBDA;
avail=n;
}

void CHANGE_LABEL(labeltype l, node i; TREE *T) {
if (SPACE[i].label==PRAZNO) { /* ? */
printf("Taj cvor nije u stablu!");
system("pause");
exit(1);
}
SPACE[i].label=l;
}
...
[/code:1]
[/quote]

nisam htjel quotat cijeli post jer je malo prevelik...
uglavnom... nije dobro. ( bar ovaj mali dio koji sam ti pogledo )

U startu imaš par početničkih grešaka tipa:

[code:1]SPACE[MAXN][/code:1]

- zatim funkcija MAKE_NULL nije dobro zatvorena. ( tj. for petlja u njoj )

- zatim:
[code:1]node avail[/code:1]
u istoj funkciji. Čemu služi? vidim da je koristiš odmah u sljedećoj funkciji bez da si je u istoj deklarirao. Ta varijabla ne postoji u nekoj drugoj funkciji jer se uništi na kraju one na kojoj je deklarirana.

-funkcija CHANGE_LABEL bi trebala mjenjat ime nekog čvora u određenom stablu.
TREE *T je pokazivač na stablo ( pretpostavljam vjerojatno na korijen ). Što ako čvor ( node i ) koji ulazi u funkciju postoji u nekom drugom stablu iz SPACE - a ( ako imaš više stabla u space -u, ako u space -u imaš samo jedno stablo, zašto koristiš pointer na njega? ) ?
Što ako postoji ( čvor i ) u baš ovom stablu kojeg mjenjaš, ali u tom istom stablu postoji još jedan čvor koji ima ime koje pokušavaš postavit kao novo ( labeltype l )?

Nemoj krivo shvatit ovaj post, kao samu kritiku, ali ti moram reć da nisi na pravom putu...

Probaj napravit nešto najjednostavnije što možeš ( ako govorimo o bilo kojoj implementaciji ), a ako ti to proradi ili kad ti proradi malo počni komplicirat...
c.p.-23 (napisa):
ima li itko živ implementaciju:
a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
Crying or Very sad Embarassed


s obzirom da se radi o implementaciji pomoću nesortirane vezane liste ( implementirane pomoću pointera ) ta lista ne treba biti SORTIRANA , pa po čemu se to razlikuje od obične liste ( implementirane pomoću pointera ).

Ne razlikuje se. Nabavi običnu implementaciju liste pomoću pointera, tog bar ima na internetu na 100 strana.

znači umjesto onog position pointera koji je tam u svakoj funkciji oznaka koji element ubacit,brisat..., sam stavi pointer na prvi element liste. Jer ti pozicija u skupu nije bitna.

Funkcija MAKE_NULL je ista.
Kod funkcije INSERT uvijek ubacuj elemente na početak liste.
Kod funkcije DELETE šećeš po listi od početka dok ne naletiš na neki element ( koji je tamo jedini jer se radi o skupu ) i pobrišeš ga.
Funkcija MEMBER je gotovo ista kao DELETE, sam ne brišeš podatak na koji eventualno naletiš.
Funkcija MIN ( MAX ). Šećeš po cijeloj listi i najveći ( najmanji ) element spremiš u pomoćnu varijablu koju ćeš vratiti.

Ostale funkcije su niš drugo nego kombinacija navedenih.

eve (napisa):

jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?

muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
plizz help ak neko to ima...


si ovo stavila?

Kod:
#define B 20


ak je u nečem drugom problem napiši tu u čem ili meni na pm.

Added after 32 minutes:

Tomy007 (napisa):
Kod:

...
typedef struct {
        labeltype label;
        node parent, first_child, next_sibling;
        }SPACE [MAXN]
       
void MAKE_NULL(int n) {
    node avail;
    for (i=n, i<MAXN, i++) {
        SPACE[I].label=PRAZNO;
        SPACE[i].next_sibling=i+1;
        SPACE[MAXN].next_sibling=LAMBDA;
    avail=n;
}

void CHANGE_LABEL(labeltype l, node i; TREE *T) {
        if (SPACE[i].label==PRAZNO) {                /* ? */
        printf("Taj cvor nije u stablu!");
        system("pause");
        exit(1);
        } 
        SPACE[i].label=l;             
        }                               
...



nisam htjel quotat cijeli post jer je malo prevelik...
uglavnom... nije dobro. ( bar ovaj mali dio koji sam ti pogledo )

U startu imaš par početničkih grešaka tipa:

Kod:
SPACE[MAXN]


- zatim funkcija MAKE_NULL nije dobro zatvorena. ( tj. for petlja u njoj )

- zatim:
Kod:
node avail

u istoj funkciji. Čemu služi? vidim da je koristiš odmah u sljedećoj funkciji bez da si je u istoj deklarirao. Ta varijabla ne postoji u nekoj drugoj funkciji jer se uništi na kraju one na kojoj je deklarirana.

-funkcija CHANGE_LABEL bi trebala mjenjat ime nekog čvora u određenom stablu.
TREE *T je pokazivač na stablo ( pretpostavljam vjerojatno na korijen ). Što ako čvor ( node i ) koji ulazi u funkciju postoji u nekom drugom stablu iz SPACE - a ( ako imaš više stabla u space -u, ako u space -u imaš samo jedno stablo, zašto koristiš pointer na njega? ) ?
Što ako postoji ( čvor i ) u baš ovom stablu kojeg mjenjaš, ali u tom istom stablu postoji još jedan čvor koji ima ime koje pokušavaš postavit kao novo ( labeltype l )?

Nemoj krivo shvatit ovaj post, kao samu kritiku, ali ti moram reć da nisi na pravom putu...

Probaj napravit nešto najjednostavnije što možeš ( ako govorimo o bilo kojoj implementaciji ), a ako ti to proradi ili kad ti proradi malo počni komplicirat...


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
nike
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 02. 2010. (13:05:01)
Postovi: (58)16
Sarma = la pohva - posuda
= 6 - 3

PostPostano: 13:11 čet, 13. 1. 2011    Naslov: Citirajte i odgovorite

Trebala bi mi pomoć: imam implementaciju atp TREE preko veze čvor->roditelj,prvo dijete,idući brat...početnu implementaciju pomoću typedef struct sam napravio..Ono što me buni jest kako povezat polje space[maxn] sa imenom TREE...Znači imam ovo:

typedef int node; //index u polju
typedef char labeltype;

typedef struct{
labeltype label;
node parent , first.child , next.sibling;
}SPACE[MAXN];

Gdje je sad tu TREE? jer ja u svim potprogramima koristim kao varijablu TREE,al neznam kako polje space povezat sa TREE....
Kada napravim ovo :

int main(void){

SPACE[MAXN] T;

javlja mi grešku (nešto tipa da sam zaboravio napisat neki točka zarez)..Al zapravo bi želio implementirat TREE T...kako da to postignem?
Trebala bi mi pomoć: imam implementaciju atp TREE preko veze čvor→roditelj,prvo dijete,idući brat...početnu implementaciju pomoću typedef struct sam napravio..Ono što me buni jest kako povezat polje space[maxn] sa imenom TREE...Znači imam ovo:

typedef int node; //index u polju
typedef char labeltype;

typedef struct{
labeltype label;
node parent , first.child , next.sibling;
}SPACE[MAXN];

Gdje je sad tu TREE? jer ja u svim potprogramima koristim kao varijablu TREE,al neznam kako polje space povezat sa TREE....
Kada napravim ovo :

int main(void){

SPACE[MAXN] T;

javlja mi grešku (nešto tipa da sam zaboravio napisat neki točka zarez)..Al zapravo bi želio implementirat TREE T...kako da to postignem?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Cobs
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15)
Postovi: (206)16
Spol: muško
Sarma = la pohva - posuda
26 = 40 - 14
Lokacija: Geto

PostPostano: 16:58 čet, 13. 1. 2011    Naslov: Citirajte i odgovorite

možeš recimo stavit:

[code:1]typedef node TREE;[/code:1]

to bi bilo ok ako imaš samo jedno stablo u SPACE - u.

ak bi ih imo više onda bi bilo pogodnijie

[code:1]typedef node* TREE;[/code:1]

uglavnom, ovaj SPACE u mainu ne spominješ nigdje, to ti je samo prostor svih čvorova koje možeš koristiti u main funkciji ( sva memorija koju možeš koristiti za čvorove, pa ona nema nikakve veze s nekim stablom posebno )

znači ak bi imo jedno stablo u cijelom prostoru...
( typedef node TREE; )
[code:1]int main(){

TREE stablo;
MAKE_NULL( &stablo ); // SPACE[0] je korijen ovog jedinog stabla
// ovak bi ga mogo koristit
stablo.first_child.next_sibiling.label;
....
}[/code:1]

ili više stabla u prostoru:

( typedef node* TREE; )
[code:1]int main(){

TREE stablo1;
TREE stablo2;

MAKE_NULL( &stablo1 );
MAKE_NULL( &stablo2 );
// sada funkcija MAKE_NULL ne stavlja
// da je korijen na SPACE[0] neg kak je ti namjestis
....
// ovak bi ih mogo koristit
stablo1-> first_child.next_sibiling.label;
stablo2->first_child.first_child.next_sibiling.label;
...
}[/code:1]
možeš recimo stavit:

Kod:
typedef node TREE;


to bi bilo ok ako imaš samo jedno stablo u SPACE - u.

ak bi ih imo više onda bi bilo pogodnijie

Kod:
typedef node* TREE;


uglavnom, ovaj SPACE u mainu ne spominješ nigdje, to ti je samo prostor svih čvorova koje možeš koristiti u main funkciji ( sva memorija koju možeš koristiti za čvorove, pa ona nema nikakve veze s nekim stablom posebno )

znači ak bi imo jedno stablo u cijelom prostoru...
( typedef node TREE; )
Kod:
int main(){

         TREE stablo;
         MAKE_NULL( &stablo ); // SPACE[0] je korijen ovog jedinog stabla
         // ovak bi ga mogo koristit
         stablo.first_child.next_sibiling.label;
         ....
}


ili više stabla u prostoru:

( typedef node* TREE; )
Kod:
int main(){

         TREE stablo1;
         TREE stablo2;

         MAKE_NULL( &stablo1 );
         MAKE_NULL( &stablo2 );
         // sada funkcija MAKE_NULL ne stavlja
         // da je korijen na SPACE[0] neg kak je ti namjestis
         ....
        // ovak bi ih mogo koristit
        stablo1-> first_child.next_sibiling.label;
        stablo2->first_child.first_child.next_sibiling.label;
       ...
}




Zadnja promjena: Cobs; 23:11 pet, 14. 1. 2011; ukupno mijenjano 1 put.
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Tomy007
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 08. 11. 2009. (19:45:28)
Postovi: (94)16
Sarma = la pohva - posuda
-2 = 4 - 6

PostPostano: 21:40 pet, 14. 1. 2011    Naslov: Citirajte i odgovorite

Zna li netko neki jednostavan način kako omogučiti korisniku da u program izvana unese bilo koje stablo(obično stablo, ne binarno) sa oznakama tipa char?
Zna li netko neki jednostavan način kako omogučiti korisniku da u program izvana unese bilo koje stablo(obično stablo, ne binarno) sa oznakama tipa char?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Cobs
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15)
Postovi: (206)16
Spol: muško
Sarma = la pohva - posuda
26 = 40 - 14
Lokacija: Geto

PostPostano: 23:09 pet, 14. 1. 2011    Naslov: Citirajte i odgovorite

najpojednostavljeniji oblik rekurzivne funkcije:

[code:1]
void unesi_cvorove( TREE *T ){

upisi broj djece za cvor *T;

while( broj_djece > 0 ){
unesi dijete za cvor *T;
broj_djece--;
}

// sada su unesena sva djeca od cvora *T

sada pomocnim pointerom odi po svoj djeci od *T
i unosi djecu za njih

// pozovi funkciju unesi_cvorove( ... ) na pomocnom pointeru

}
[/code:1]

kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.

Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.
najpojednostavljeniji oblik rekurzivne funkcije:

Kod:

void unesi_cvorove( TREE *T ){

       upisi broj djece za cvor *T;
       
       while( broj_djece > 0 ){
                unesi dijete za cvor *T;
                broj_djece--;
       }

       // sada su unesena sva djeca od cvora *T

      sada pomocnim pointerom odi po svoj djeci od *T
      i unosi djecu za njih

     // pozovi funkciju unesi_cvorove( ... )  na pomocnom pointeru   

}


kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.

Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
luna5
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 15. 01. 2011. (00:11:50)
Postovi: (6)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 0:18 sub, 15. 1. 2011    Naslov: Citirajte i odgovorite

[quote="Cobs"]najpojednostavljeniji oblik rekurzivne funkcije:

[code:1]
void unesi_cvorove( TREE *T ){

upisi broj djece za cvor *T;

while( broj_djece > 0 ){
unesi dijete za cvor *T;
broj_djece--;
}

// sada su unesena sva djeca od cvora *T

sada pomocnim pointerom odi po svoj djeci od *T
i unosi djecu za njih

// pozovi funkciju unesi_cvorove( ... ) na pomocnom pointeru

}
[/code:1]

kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.

Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.[/quote]

meni je isto zadatak osmisliti unos podataka tipa char, s tim da mi je implementacije cvor->(prvo dijete, brat) pomocu pointera
probala sam nerekurzivnu verziju, nije mi jasno sto ne funkcionira
[code:1]
int main()
{
node n;
labeltype l;
int d,b;
scanf("%c",&l);
TREE T;
n=MAKE_ROOT(l,&T);
while(1)
{
scanf("%d", &d); scanf("%d", &b); //tu unosim 0 ili 1 jer svaki put ispitujem ima li cvor dijete i prvog brata
if(d==1)
{
scanf("%c",&l);printf("\n%c\n",l);
n=INSERT_CHILD(l,n,&T);
n=PARENT(n,T);
}
if(b==1)
{
scanf("%c",&l);
n=INSERT_SIBLING(l,n,&T);
n=FIRST_CHILD(PARENT(n,T),T);
}
if(FIRST_CHILD(n,T)!=LAMBDA)
{
n=FIRST_CHILD(n,T);
continue;
}
if(NEXT_SIBLING(n,T)!=LAMBDA)
{
n=NEXT_SIBLING(n,T);
continue;
}
while((NEXT_SIBLING(n,T)==LAMBDA)&&(PARENT(n,T)!=LAMBDA))
{
n=PARENT(n,T);
}
if(PARENT(n,T)==LAMBDA)
break;
else
{
n=NEXT_SIBLING(n,T);
}
}
return 0;

}
[/code:1][/code]
Cobs (napisa):
najpojednostavljeniji oblik rekurzivne funkcije:

Kod:

void unesi_cvorove( TREE *T ){

       upisi broj djece za cvor *T;
       
       while( broj_djece > 0 ){
                unesi dijete za cvor *T;
                broj_djece--;
       }

       // sada su unesena sva djeca od cvora *T

      sada pomocnim pointerom odi po svoj djeci od *T
      i unosi djecu za njih

     // pozovi funkciju unesi_cvorove( ... )  na pomocnom pointeru   

}


kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.

Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.


meni je isto zadatak osmisliti unos podataka tipa char, s tim da mi je implementacije cvor→(prvo dijete, brat) pomocu pointera
probala sam nerekurzivnu verziju, nije mi jasno sto ne funkcionira
Kod:

int main()
{
    node n;
    labeltype l;
    int d,b;
    scanf("%c",&l);
    TREE T;
    n=MAKE_ROOT(l,&T);
    while(1)
    {
        scanf("%d", &d); scanf("%d", &b); //tu unosim 0 ili 1 jer svaki put ispitujem ima li cvor dijete i prvog brata
        if(d==1)
        {
             scanf("%c",&l);printf("\n%c\n",l);
             n=INSERT_CHILD(l,n,&T);
             n=PARENT(n,T);
        }
        if(b==1)
        {
             scanf("%c",&l);
             n=INSERT_SIBLING(l,n,&T);
             n=FIRST_CHILD(PARENT(n,T),T);
        }
        if(FIRST_CHILD(n,T)!=LAMBDA)
        {
              n=FIRST_CHILD(n,T);
              continue;
        }
        if(NEXT_SIBLING(n,T)!=LAMBDA)
        {
              n=NEXT_SIBLING(n,T);
              continue;
        }
        while((NEXT_SIBLING(n,T)==LAMBDA)&&(PARENT(n,T)!=LAMBDA))
        {
             n=PARENT(n,T);
        }
        if(PARENT(n,T)==LAMBDA)
             break;
        else
        {
              n=NEXT_SIBLING(n,T);
        } 
     }
     return 0; 
 
}
[/code]


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Vanja_
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 11. 2009. (14:38:39)
Postovi: (2C)16
Sarma = la pohva - posuda
-1 = 2 - 3

PostPostano: 15:42 sub, 15. 1. 2011    Naslov: Citirajte i odgovorite

imam zadatak za domacu zadacu sa dinamickim programiranjem...

kako funkcionira sljedeci problem:

duljina niza, odnosno velicina polja mi nije zadana. tj. korisnik unosi duljinu niza, odnosno velicinu polja, i tek nakon toga bi se valjda trebalo sve kreirati.

u skripti je to opisano ovako:
'' float M[D1][D2];
int w[D1];
float p[D1]; ''

kako to funkcionira u sintaksi? tipa korisnik unese n i m, a meni bi trebali: polje M[n][m], i w[n] i p[n].

Hvala! :)
imam zadatak za domacu zadacu sa dinamickim programiranjem...

kako funkcionira sljedeci problem:

duljina niza, odnosno velicina polja mi nije zadana. tj. korisnik unosi duljinu niza, odnosno velicinu polja, i tek nakon toga bi se valjda trebalo sve kreirati.

u skripti je to opisano ovako:
'' float M[D1][D2];
int w[D1];
float p[D1]; ''

kako to funkcionira u sintaksi? tipa korisnik unese n i m, a meni bi trebali: polje M[n][m], i w[n] i p[n].

Hvala! Smile


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Idite na 1, 2, 3, 4, 5, 6, 7, 8  Sljedeće
Stranica 1 / 8.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan