Binaire bomen in C zijn een goede manier om dynamisch gegevens voor eenvoudig zoeken te organiseren . Echter , ze vereisen een hoop werk te behouden . Instructies Maak de Binary Tree Structuur 1 uw binaire boom . Elke binaire boom zal een structuur nodig , zelfs als het slechts een variabele . Kies een naam , gebruik dan typedef om het te maken : typedef struct student_data STUDENT_DATA ; 2 Definieer de structuur . Omvatten twee pointers naar dezelfde structuur : struct student_data { int student_id ; int student_grade ; STUDENT_DATA * links , * rechts; } ; 3 Wijs een pointer naar deze datastructuur , initialiseren het aan NULL , om de boom een hoofd zijn : STUDENT_DATA * leerlingen = NULL ; In de Binary Tree 4 toewijzen twee tijdelijke pointers naar de datastructuur : STUDENT_DATA * new_student , * cur_student ; Gebruik malloc 5 ( ) om een nieuw element te maken , altijd te controleren op een fout : if ( ( new_student = malloc ( sizeof ( STUDENT_DATA ) ) ) == NULL ) { abort ( ) ; } 6 Bevolken velden het nieuwe element . Stel haar links en rechts velden NULL : new_student - > student_id = NEWID ; new_student - > student_size = newsize ; new_student - > links = NULL ; new_student - > rechts = NULL ; 7 Beschouw het hoofd variable . Als de kop variabele NULL is , dit is het eerste element toegevoegd aan de boom , dus stel het hoofd variabele om te wijzen op het, en je bent klaar : indien { studenten = new_student ; return ;} < ( studenten ! ) br > Start 8 aan de top van de boom : cur_student = studenten , terwijl ( cur_student ) { 9 Behandel de dubbele vermelding als de nieuwe waarde en de huidige waarde gelijk zijn : if ( NEWID == cur_student - > student_id ) { abort ( ) ; } Deal met ongelijke waarden 10 . Als de nieuwe waarde lager is dan de huidige waarde van de nieuwe element gaat links . Voeg het onmiddellijk als er niets aan de linkerzijde . Anders , traverse naar links en loop : if ( NEWID student_id ) { if ( cur_student - > links == NULL ) { cur_student - > links = newstudent ; return 1 ; } cur_student = cur_student - > links; 11 Doe hetzelfde aan de rechterkant, anders : } else {if ( cur_student - > rechts == NULL ) { cur_student - > rechts = newstudent ; return 1 ; } cur_student = cur_student - > rechts ; } } < br > Zoek de Binary Tree 12 Maak een tijdelijke variabele wijst naar de datastructuur : STUDENT_DATA * cur_student ; 13 Stel uw tijdelijke variabele aan het hoofd variabel : cur_student = students_head ; Loop 14 door de elementen , het controleren op de gewenste waarde : terwijl ( cur_student ) { if ( cur_student - > student_id == 15 ) { return cur_student - > student_grade ; } Tak 15 naar links of rechts , en loop, als het niet gevonden : if ( cur_student - > student_id cur_student = cur_student - > rechts ; } else { cur_student = cur_student - > links; } 16 Kijk of de lus eindigt Als dat zo is , betekent dit dat je nooit gevonden het item : . } return 0 ; Clean Up 17 deallocate de binaire boom wanneer uw programma eindigt , zo niet alle besturingssystemen dit automatisch zal behandelen dit kan het beste gebeuren met behulp van een recursieve functie : . leegte deallocate_binary_tree ( STUDENT_DATA * boom) { 18 opvolgen: als er is geen boom , er is niets te doen : als return ; 19 deallocate de linker en rechter substructuren recursief ( boom ! ) : deallocate_binary_tree ( boom - > links) ; deallocate_binary_tree ( boom - > rechts ) ; 20 deallocate het element , en je bent klaar : gratis ( boom) ; }
|