Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να δημιουργήσετε ένα δυαδικό δέντρο, C

Δυαδικά δέντρα στη C είναι ένας καλός τρόπος για να οργανώσει δυναμικά δεδομένα για εύκολη αναζήτηση . Ωστόσο, απαιτείται πολλή δουλειά για να διατηρηθεί . Οδηγίες
Δημιουργήστε το Binary Tree
Η 1

Δομή δυαδικό δέντρο σας . Κάθε δυαδικό δέντρο θα χρειαστεί μια δομή , ακόμη και αν έχει μόνο μία μεταβλητή . Επιλέξτε ένα όνομα , και στη συνέχεια χρησιμοποιήστε typedef για να δημιουργήσετε: typedef struct

 student_data student_data ? 
2

Καθορίστε τη δομή . Περιλαμβάνει δύο δείκτες στην ίδια δομή : struct

 student_data { int student_ID ? Int student_grade ? Student_data * αριστερά , δεξιά * ? } ? 
Η 3

Διαθέστε ένα δείκτη σε αυτή τη δομή δεδομένων , την προετοιμασία να NULL , για να είναι επικεφαλής του δέντρου :

 student_data * μαθητές = NULL? 

Προσθήκη στο Binary Tree
Η 4

Διαθέστε δύο προσωρινές υποδείξεις ως προς τη δομή δεδομένων :

 student_data * new_student , * cur_student ? 
5

Χρησιμοποιήστε malloc ( ) για να δημιουργήσετε ένα νέο στοιχείο , πάντα τον έλεγχο για ένα λάθος :

 αν ( ( new_student = malloc ( sizeof ( student_data ) ) ) == NULL) { ματαίωση ( ) ? } 
6

Συμπλήρωση πεδίων του νέου στοιχείου . Ορίστε το αριστερό και το δεξί πεδία με NULL :

 new_student - > student_ID = newid ? New_student - > student_size = newsize ? New_student - > αριστερά = NULL? New_student - > δεξιά = NULL? Σελίδα 7 

Εξετάστε το κεφάλι μεταβλητή . Αν η μεταβλητή της κεφαλής είναι NULL , αυτό είναι το πρώτο στοιχείο που προστίθεται στο δέντρο , έτσι ορίσετε τη μεταβλητή κεφάλι να επισημάνω σε αυτό , και είστε έτοιμοι :

 αν ( οι μαθητές ! ) { Μαθητές = new_student ? Επιστροφή? } 
8

Ξεκινήστε από την κορυφή του δέντρου :

 cur_student = φοιτητές ? ενώ ( cur_student ) { Τετάρτη 9 

Χειριστείτε τη διπλή καταχώρηση , εάν η νέα τιμή και η τρέχουσα αξία είναι ίση :

 εάν ( newid == cur_student - > student_ID ) { ματαίωση ( ) ? } 
10

Deal με άνισες τιμές . Αν η νέα τιμή είναι μικρότερη από την τρέχουσα τιμή , το νέο στοιχείο πηγαίνει στα αριστερά. Προσθέστε αμέσως αν δεν υπάρχει τίποτα στα αριστερά . Διαφορετικά , Τράβερς αριστερά και loop :

 αν ( newid student_ID ) {if ( cur_student - > αριστερά == NULL) { cur_student - > αριστερά = newstudent ? Επιστροφή 1? } Cur_student = cur_student - > αριστερά ? 
11

Κάντε το ίδιο πράγμα στα δεξιά , αλλιώς :

 } else {if ( cur_student - > δεξιά == NULL) { cur_student - > δεξιά = newstudent ? επιστροφή 1? } cur_student = cur_student - > δεξιά? } } 

Αναζήτηση στο Binary Tree
Η 12

δημιουργήσετε μια προσωρινή μεταβλητή που δείχνει τη δομή των δεδομένων :

 student_data * cur_student ? Τετάρτη 13 

Ορίστε προσωρινή μεταβλητή σας στο κεφάλι μεταβλητή :

 cur_student = students_head ? 
14

Loop μέσα από τα στοιχεία , ο έλεγχος για την επιθυμητή τιμή :

 ενώ ( cur_student ) {if ( cur_student - > student_ID == 15 ) { επιστροφή cur_student - > student_grade ? } 
15

Υποκατάστημα αριστερά ή δεξιά , και βρόχου , αν δεν βρεθεί :

 αν ( cur_student - > student_ID cur_student = cur_student - > δεξιά? } else { cur_student = cur_student - > αριστερά? } Τετάρτη 16 

Δείτε αν ο βρόχος τελειώνει Αν το κάνει , αυτό σημαίνει ότι ποτέ δεν βρήκε το σημείο : .

 } επιστροφή 0? 
Η Clean Up
Η 17

. να βρω τον ιδιοκτήτη του δυαδικού δέντρου , όταν τελειώνει το πρόγραμμά σας , καθώς δεν είναι όλα τα λειτουργικά συστήματα θα χειριστεί αυτό αυτόματα Αυτό γίνεται καλύτερα χρησιμοποιώντας μια αναδρομική συνάρτηση : void

 deallocate_binary_tree ( student_data * δέντρο ) { Τετάρτη 18 

Προσέξτε : Εάν υπάρχει δεν είναι κάθε δέντρο , δεν υπάρχει τίποτα να κάνουμε : ( ! δέντρο )

 εάν η επιστροφή ? Πέμπτη 19 

δεσμεύσει την αριστερή και δεξιά υποδένδρων αναδρομικά :

 deallocate_binary_tree ( tree - > αριστερά ) ? deallocate_binary_tree ( δέντρο - > δεξιά)? 
20

δεσμεύσει το στοιχείο , και είστε έτοιμοι :

 δωρεάν ( δέντρο ) ? } 
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα