arbres binaires en C sont un bon moyen d'organiser dynamiquement des données pour faciliter la recherche . Toutefois, ils exigent beaucoup de travail à entretenir. Instructions
Créer l' Binary Tree
1 Structure de
votre arbre binaire . Chaque arbre binaire aura besoin d'une structure , même si elle ne dispose que d' une seule variable . Choisir un nom , puis utiliser typedef pour le créer :
typedef struct student_data STUDENT_DATA ; Page 2 définir la structure . Inclure deux pointeurs vers la même structure:
struct {int student_data student_id ; int student_grade ; STUDENT_DATA * gauche , droite * ; };
3 allouer un pointeur sur cette structure de données , l'initialisation à NULL , pour être la tête de l' arbre :
STUDENT_DATA * élèves = NULL;
Ajouter à la Binary Tree
4 Allouer deux pointeurs temporaires à la structure de données :
STUDENT_DATA * new_student , * cur_student ;
5 utilisation malloc () pour créer un nouvel élément , toujours vérifier une erreur :
if (( new_student = malloc ( sizeof ( STUDENT_DATA ))) == NULL ) { abort () ; }
6 Remplir les champs du nouvel élément . Régler ses champs gauche et droit de NULL :
new_student -> student_id = newID ; new_student -> student_size = NewSize ; new_student -> gauche = NULL; new_student -> droite = NULL;
7 Envisager la tête variable. Si la variable de tête est NULL, c'est le premier élément ajouté à l'arbre , afin de définir la charge variable pour pointer vers elle , et vous avez terminé :
si { élèves = new_student , de retour; } < (étudiants !) br> 8 départ au sommet de l'arbre :
cur_student = étudiants ; while ( cur_student ) {
9 Poignée l'entrée en double si la nouvelle valeur et la valeur actuelle sont égaux :
if ( newID == cur_student -> student_id ) { abort () ; }
10 Traiter les valeurs inégales . Si la nouvelle valeur est inférieure à la valeur de courant , le nouvel élément passe à gauche. Ajoutez-le immédiatement s'il n'y a rien sur la gauche. Sinon, traverser à gauche et boucle :
if ( newID student_id ) {if ( cur_student -> gauche == null) { cur_student -> gauche = newstudent ; return 1; } cur_student = cur_student -> gauche ;
11 < p> Faites la même chose sur la droite, sinon : } else {if ( cur_student -> droite == null) { cur_student -> droite = newstudent ; return 1; } cur_student = cur_student -> droite ;}}
Recherche du Binary Tree
12 Créer une variable temporaire pointant vers la structure de données :
STUDENT_DATA * cur_student ;
13 définir la variable temporaire à la tête Variable:
cur_student = students_head ;
14 boucle à travers les éléments , la vérification de la valeur souhaitée : tout
( cur_student ) {if ( cur_student -> student_id == 15) {return cur_student -> student_grade ; }
15 Direction à gauche ou à droite, et la boucle , si elle n'est pas trouvée :
if ( cur_student -> student_id cur_student = cur_student -> droite ; } else { cur_student = cur_student -> gauche ;}
16 Voir si la boucle se termine si c'est le cas, cela signifie que vous n'avez jamais trouvé l'article : .
} return 0;
Clean Up
17 Libère l'arbre binaire lorsque votre programme se termine, comme tous les systèmes d'exploitation ne se chargera automatiquement cette Ceci mieux est d'utiliser une fonction récursive : .
vide deallocate_binary_tree ( STUDENT_DATA * arbre) {
18 Observer : Si n'est pas n'importe quel arbre , il n'y a rien à faire :
si le retour ;
19 DEALLOCATE les arbres gauche et droit de façon récursive ( arbre! ) :
deallocate_binary_tree (arbre -> gauche) ; deallocate_binary_tree (arbre -> droite) ;
20 DEALLOCATE l'élément, et vous avez terminé : gratuit
(arbre) ; }