Προς το περιεχόμενο

Δυαδικα δεντρα και δομες


Mode

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σε ολους

εχω αρχισει να διαβαζω δυαδικα δεντρα

αλλα εχω κολλησει σε ενα αλλο σκελος

τους δεικτες μεσα σε δομες

δεν μπορω να καταλαβω τι συμβαινει

παρακατω αναφερονται κομματια κωδικα απο ενα βιβλιο που διαβαζω

οποιος θελει ας βοηθησει γιατι τα εχω κανει μανταρα

ευχαριστω

 

//struct node

{

int data;

struct node *left;

struct node *right;

 

};

 

struct node *root;

struct node *newnode();

struct node *find();

struct node *insert();

void display();

struct node *find_left_most();

struct node *find_right_most(); //

 

σε αυτο το σημειο δεν μπορω να καταλαβω γιατι φτιαχνει την δομη node

και βαζει δεικτες στα left και στα right καθως επισης και στα root,newnode() και

λοιπα.

 

//

struct node *newnode(int num)

{

struct node *neos;

neos=malloc(sizeof(struct node));

neos->data = num;

neos->left = NULL;

neos->right = NULL;

return(neos);//

 

//struct node *insert(int num)

{

struct node *next,*current,*ptr;

int isleft;

next=current=root;

ptr=newnode(num);

if (root == NULL)

{

return ptr;

}

while(1)

{

if(num < current->data)

{

next = current->left;

isleft=1;

}

else

{

next = current->right;

isleft=0;

}

if(next == NULL)

{

if(isleft)

current->left=ptr;

else

current->right=ptr;

return ptr;

}

current=next;

}

}//

εδω γιατι βαζει δεικτες στις μεταβλητες current,next και prt???

παραλληλα σε καποιο σημειο αναφερει το εξης:current-->data,

current-->left

current-->right

που τα βρήκε αφου τα μονα που υπαρχουν ειναι στην συναρτηση newnode()

με ονοματα :neos--->data, neos--->left, neos---right ???

 

Υ.Γ.:εννοειται οτι ξερω τι σημαινει οτι πχ το neos-->data=num οτι

παει να πει εκχωρησε στην μεταβλητη data του neos την τιμη

της μεταβλητης num

 

Συγνωμη αν εγινα κουραστικος αν και ειναι το πρωτο post που κανω

και παρακαλω οποιος γνωρίζει και θέλει ας βοηθησει

Ευχαριστω εκ των προτερων Mode

Δημοσ.

σε αυτο το σημειο δεν μπορω να καταλαβω γιατι φτιαχνει την δομη node

και βαζει δεικτες στα left και στα right καθως επισης και στα root,newnode() και

λοιπα.

---------* node

-------/--------\

------/----------\

----*l1----------*r1

----/--\----------/--\

---/----\--------/----\

*l2-----*r2----*l3----*r3

dioti kathe kainourgio node opws vlepeis kai sto struct node periexei tis eksis plirofories....to data (safti tin periptwsi ena integer) kai 2 pointers sti mnimi i opoia periexei plirofories gia ta deksia kai aristera sub-nodes. kathe fora pou dimiourgeis ena kainourgio node (mesw tou finction newnode()) prepei na dineis plirofories (arxika NULL) gia ta nodes sta opoia tha prepei na deixnoun oi pointers. p.x. to *node exei left kai right nodes ta l1,r1 kai parent null...to l1 exei left kai right nodes l2 kai r2 kai parent to l1, etc. etsi tha mporeis na perirefersai mesa sto binary tree.

εδω γιατι βαζει δεικτες στις μεταβλητες current,next και prt???

Oi pointers sta nodes current, next (ta opoia arxika deixnoun sto node root) xrisimopoiountai wste simfwna me tis sinthikes parakatw o pointer tou current node mporei na xrisimopoiithei wste na deixnei to node to opoio kaneis traverse ekeini ti stigmi kai o pointer tou next na deixnei to epomeno. Arxika prepei na theseis pointers sto current kai meta na thesei pointers sta paidia tou.

παραλληλα σε καποιο σημειο αναφερει το εξης:current-->data,

current-->left

current-->right

που τα βρήκε αφου τα μονα που υπαρχουν ειναι στην συναρτηση newnode()

με ονοματα :neos--->data, neos--->left, neos---right ???

prwton den exei kalesei ti sinartisi newnode gia to current (dioti arxika einai to root) ara akoma kai kei den katalavainw pws mperdeftikes....kai defteron i sinartisi newnode xrisimopoiei to neos wste na kanei allocate mnimi se ena kainourgio node kai meta epistrefei ti diefthinsi tou...p.x. estw exeis ena node* test = NULL...test = newnode()...tote tha dimiourgithei to node neos kai i diefthinsi tou tha epistrafei kai tha antikatastisei tin invalid diefthinsi tou test me ti diefthinsi tou neos. to neos de to xrisimipoioeis pouthena meta...

Δημοσ.

Σε ευχαριστω πολυ για τις επεξηγησεις σου kickeras

ειναι πολυ απλες και κατανοητες

και απλα για να ξερουν και

οι άλλοι που θα διαβασουν το post αυτο

ο καθηγητης που μας κανει το μαθημα

το κανει με εναν πως να το πω μπακαλικο τροπο

και αναγκαστικα διαβαζω με βιβλιο (εννοειται μονος μου)

και αποριες ποσταρω εδω

Δημοσ.

mou pire ligaki na katalavw ti zitas logw twn ellinikwn orologiwn (deiktes, domes, diadika dentra....pragmatika den katalavainw ton logo. as iparxoune na kseroume poies einai alla na didaskontai sta agglika).

katalavainw ti ennoeis....oi kathigites sinithws i den to katalavainoun afto pou didaskoune (kai to xoun voutiksei apo allou) i ksexnoun oti o tropos pou to lene den einai katanoitos se atoma me ligoteri empeiria sto thema...me to pou mpeis sti logiki twn pointers tha sou fanoun ola pio efkola...oti xreiasteis postare edw. kali tixi.

Δημοσ.

ευχαριστω kickeras απλα ενω καταλαβαινω την απλη λογικη των δεικτων

δεν ειμαι πολυ εξοικειωμενος ακομα με δεικτες μεσα σε δομες

και ισως για αυτο κολλαω

οσο για τον καθηγητη θα σου πω κατι πολυ απλο

μας εκανε την δυαδικη αναζητηση χρησιμοποιώντας μονο μια κεφαλιδα(file .h)

το οποίο ειναι το #include <stdio.h>

και χρησιμοποίησε την malloc() χωρις να χρησιμοποιήσει την αντιστοιχη κεφαλίδα #include <malloc.h>

φαντασου δηλαδη ποσο μπακάλης ειναι στην δουλεια του :)

Δημοσ.

to provlima me tous akadimaikous einai oti enw (sinithws :)) katalavainoune ti lene den exoune empeiria panw ston programmatismo. ta xoune diavasei diladi alla den exoune kathisei katw na ta koitaksoune. einai to path pou dialegei o kathenas.

katse paikse me tous pointers kai sto telos tha deis oti einai aploi san concept, xrisimoi kai arketa epikindinoi an den ksereis ti akrivws kaneis :D....skepsou tous san apla tetrampita pragmatakia (oxi panta!) pou periexoun mia defthinsi mnimis...eite twra apo einai mesa se struct, i monoi tous san kotopoula stin ethniki den exei kamia apolitws diafora. opws exeis to int etsi mporeis na exeis kai to int*.

Δημοσ.

τελικα εχω αρχισει και καταλαβαινω τον κωδικα καλυτερα

θελω να μου πεις αν εχω δικιο στο εξης:

ο κωδικας για τον εναν κομβο ειναι :

|------------------|

|--δεδομενα-------|

|-*left---*right----|---------------> και αυτο ειναι ενας κομβος???

|------------------|

 

Σωστα το καταλαβα ????

oπου *left δειχνει στον αριστερο κομβο ο οποιος παλι περιεχει τον παραπανω κωδικα

και *right οπου δειχνει στον δεξιο κομβο ο οποιος παλι περιεχει τον παραπανω κωδικα

και ουσιαστικουν δειχνουν τα δεδομενα τους

δηλαδη τα δεδομενα του αριστερου και τα δεδομενα του δεξιου κομβου αντιστοιχα

Σωστος και σε αυτο??

Δημοσ.

komvos = node ipothetw e?

den katalavainw ti akrivws ennoeis legontas "periexei ton parapanw kwdika". pantws nai kathe instantiation tou node periexei ola ta members apo to struct node....safti ti periptwsi to data kai pointers sto deksi kai aristero tou sub-node....an oi pointers aftoi einai NULL tote eisai sto xamilotero level.

Δημοσ.

ναι kickeras κομβος(komvos) ειναι στα αγγλικα η λεξη node

εννοώντας περιεχει τον παραπανω κωδικα στην ουσια λεω οτι

ο δεικτης(pointer) *left και *right αντιστοιχα δειχνουν κομβους δηλαδη λεω οτι

 

-----------*left--------------------------*right--------------------------

----------- | ---------------------------- |----------------------------

----------- | -----------------------------|----------------------------

|------------------| ------------------|------------------|

|--δεδομενα-------| ------------------|--δεδομενα-------|

|-*left---*right----| -------------------|-*left---*right----|

|------------------| ------------------|------------------|

Δημοσ.
---------* node

-------/--------\

------/----------\

----*l1----------*r1

----/--\----------/--\

---/----\--------/----\

*l2-----*r2----*l3----*r3

 

nai...diladi afto akrivws pou sou eipa edw!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...