Как реализовать бинарное дерево в Си
Тут я положил студентов в стек, теперь нужно вместо стека использовать дерево. Я знаю теорию бинарного дерево, но в коде реализовать не могу. Знаю только что есть левый узел struct student* left;
и правый struct student* right
. И вообще я не понимаю как можно студентов сравнивать кто больше кто меньше, или это от размера зависит?
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
typedef struct student {
char LastName[50];
char FirstName[50];
char gender;
int age;
char group[8];
int mathGrade;
int physicsGrade;
int chemistryGrade;
struct student* left;
struct student* right;
} stud;
stud* push(stud* top, const char* LastName, const char* FirstName, const char* gender, int age, const char* group, int mathGrade, int physicsGrade, int chemistryGrade ) {
stud* ptr = malloc(sizeof(stud));
if (ptr != NULL)
{
strcpy(ptr->LastName, LastName);
strcpy(ptr->FirstName, FirstName);
ptr->gender = gender;
ptr->age = age;
strcpy(ptr->group, group);
ptr->mathGrade = mathGrade;
ptr->physicsGrade = physicsGrade;
ptr->chemistryGrade = chemistryGrade;
ptr->next = top;
}
return ptr;
}
void show(const stud* top)
{
const stud* current = top;
while(current != NULL){
printf("Фамилия: %s\n", current->LastName);
printf("Имя: %s\n", current->FirstName);
printf("Пол: %c\n", current->gender);
printf("Возраст: %d\n", current->age);
printf("Группа: %s\n", current->group);
printf("Оценка по математике: %d\n", current->mathGrade);
printf("Оценка по физике: %d\n", current->physicsGrade);
printf("Оценка по химии: %d\n", current->chemistryGrade);
printf("\n");
current = current->next;
}
}
void GoodJobMan(const stud* top, const char* group) {
const stud* current = top;
while(current != NULL) {
if(strcmp(current->group, group) == 0 && current->mathGrade == 5 && current->physicsGrade == 5 && current->chemistryGrade == 5) {
printf("|ВЫВОД ОТЛИЧНИКА|\n");
printf("Фамилия: %s\n", current->LastName);
printf("Имя: %s\n", current->FirstName);
printf("Пол: %c\n", current->gender);
printf("Возраст: %d\n", current->age);
printf("Группа: %s\n", current->group);
printf("Оценка по математике: %d\n", current->mathGrade);
printf("Оценка по физике: %d\n", current->physicsGrade);
printf("Оценка по химии: %d\n", current->chemistryGrade);
printf("\n");
}
current = current->next;
}
}
int main() {
setlocale(LC_ALL, "RUS");
stud* top = NULL;
top = push(top, "Иванов", "Иван", 'м', 17, "ИСП-204", 5, 5, 4);
top = push(top, "Максимов", "Максим", 'м', 16, "ИСП-204", 5, 5, 5);
top = push(top, "Егоров", "Егор", 'м', 15, "ИСП-205", 5, 3, 4);
top = push(top, "Наталиев", "Натали", 'ж', 18, "ИСП-205", 3, 2, 4);
show(top);
GoodJobMan(top, "ИСП-204");
return 0;
}