Академический Документы
Профессиональный Документы
Культура Документы
Отчёт
Лабораторная работа № 5
Тема: Алгоритмы обработки бинарных деревьев
Кишинёв 2023
Цель: Программирование алгоритмов обработки бинарных деревьев для реализации и
использования основных операций на языке C.
Код программы:
int main() {
Tree *tree_1 = NULL;
int choice = -1, stds_nmbr = 0, buffer = 0;
while (choice) {
printf(" 1 - Create tree and input elements.\n 2 - Add element.\n 3 - Print tree (vsd).\n 4 - Draw a tree (only id).\n");
printf(" 5 - Clear tree.\n 6 - Search element.\n 7 - Edit element.\n 8 - Search min/max element.\n");
printf(" 9 - Free tree.\n 0 - Exit.\n\n");
scanf("%d", &choice);
switch(choice) {
case 1:
if(tree_1) {
printf("\nError: tree already exists.\n");
break;
}
tree_1 = create_tree();
if (!tree_1) {
printf("\nError: Failed allocation.\n");
break;
}
printf("\nInput nr of elements: ");
scanf("%d", &buffer);
for (int i = 0; i < buffer; i++) {
add_element(tree_1);
printf("\n");
stds_nmbr++;
}
break;
case 2:
add_element(tree_1);
break;
case 3:
print_vsd(tree_1);
break;
case 4:
print_tree(tree_1);
break;
case 5:
if (tree_1->head) clear_tree(tree_1);
break;
case 6:
printf("\nInput id (integer number): ");
scanf("%d", &buffer);
print_node(search_node(tree_1, buffer));
break;
case 7:
printf("\nInput id (integer number): ");
scanf("%d", &buffer);
edit_element(tree_1, buffer);
break;
case 8:
search_min_max_element(tree_1);
break;
case 9:
if (tree_1) {
if (tree_1->head) clear_tree(tree_1);
free(tree_1);
tree_1 = NULL;
}
stds_nmbr = 0;
break;
case 0:
if (tree_1) {
if (tree_1->head) clear_tree(tree_1);
free(tree_1);
tree_1 = NULL;
}
break;
default:
break;
}
system("pause");
system("cls");
}
return 0;
}
Файл .h:
//Help function
void __help_clear_tree(Node *head);
void __help_add_element(Node *head, Node *current, Node *tmp);
Node *__help_search_node(Node *current, int id);
void __help_print_tree(Node* node, int level, int dir);
void __help_print_vsd(Node *node);
int __help_search_depth(Node *node, int count);
//Function
Tree *create_tree();
Node *create_node ();
void print_node(Node *node);
void add_element(Tree *tree);
Node *search_node(Tree *tree, int id);
void clear_tree(Tree *tree);
void print_tree(Tree* tree);
void print_vsd(Tree *tree);
void edit_element(Tree *tree, int id);
int search_depth(Tree *tree);
void search_min_max_element(Tree *tree);
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#include <wchar.h>
#include <windows.h>
#include <wctype.h>
#include <locale.h>
#include "header.h"
Tree *create_tree() {
Tree *tree = malloc(sizeof(Tree));
tree->head = NULL;
return tree;
}
Node *create_node () {
Node *tmp = malloc(sizeof(Node));
if(!tmp) {
printf("\nError.\n");
return NULL;
}
tmp->data = malloc(sizeof(Data));
if(!tmp->data) {
printf("\nError.\n");
return NULL;
}
if (tmp) {
printf("Input id: ");
scanf("%d", &tmp->id);
printf("Name: ");
scanf("%s", tmp->data->name);
fflush(stdin);
printf("Adress: ");
scanf("%s", tmp->data->address);
fflush(stdin);
printf("Phone: ");
scanf("%d", &tmp->data->phone);
printf("Category: ");
scanf("%d", &tmp->data->category);
printf("Capacity: ");
scanf("%d", &tmp->data->capacity);
tmp->left = NULL;
tmp->right = NULL;
return tmp;
}
return NULL;
}
free(head->data);
free(head);
head = NULL;
}
}
__help_print_vsd(head->left);
__help_print_vsd(head->right);
}
}
void print_vsd(Tree *tree) {
if (tree) {
if (tree->head) {
__help_print_vsd(tree->head);
return;
}
printf("\nError: The tree is empty.\n");
return;
}
printf("\nError: Tree not initialized.\n");
return;
}
Меню
Инициализация и ввод
Вывод дерева(VSD)
Поиск элемента
Добавление элементов
Нарисованное дерево
Изменение элемента
Элемент до изменения
Выводы:
Я научился программированию алгоритмов бинарных деревьев для реализации и
использования основных операций на языке C.
Литература:
Основной учебник курса это ПОЛЯКОВ "Программирование на языке Си. "
2009 г.