Файл: Отчет по лабораторной работе 1 по дисциплине Структуры и алгоритмы обработки данных в эвм.docx
Добавлен: 30.11.2023
Просмотров: 85
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МинистерствообразованияинаукиРоссийскойФедерацииФедеральноегосударственноебюджетноеобразовательноеучреждениевысшегопрофессиональногообразованияТОМСКИЙГОСУДАРСТВЕННЫЙУНИВЕРСИТЕТСИСТЕМУПРАВЛЕНИЯИРАДИОЭЛЕКТРОНИКИ(ТУСУР)Кафедраавтоматизированныхсистемуправления(АСУ)Отчетполабораторнойработе№1подисциплине«СтруктурыиалгоритмыобработкиданныхвЭВМ»Выполнил: Небиев Н.И. « 26 » июля 2023 г.Проверил: «»20г.СОДЕРЖАНИЕ
ВрезультатевыполнениялабораторнойработыполученыпрактическиенавыкипредставлениявпамятиЭВМструктурыданных«бинарноедерево»,реализованынаязыкепрограммированияC/C++алгоритмыработысдеревьями.Приложение А#include
using namespace std;
struct node
{
int value; //значение вершины
node *L, *R; //Левая и Правая часть дерева
};
void add(node **n, int aData)
{
if (*n == NULL)
{
*n = new node; //Выделяем память, создаем новую ветку
(*n)->value = aData; //Кладем в выделенное место аргумент
(*n)->L = NULL;
(*n)->R = NULL; //Очищаем память для следующего роста
return;
}
if (aData > (*n)->value )
{
add( &(*n)->R, aData );
}
if (aData <= (*n)->value)
{
add( &(*n)->L, aData);
}
};
int TreeCalc(node **n, int allChild) {
int ChLeft, ChRigth;
if (*n == NULL) //дойдя до дна(низа древа).
{
return allChild = 0;//потомков нет.
}
else //Если узел существует.
//Подсчёт количества потомков для текущего узла.
ChLeft = TreeCalc( &(*n)->L, allChild); //Для левой ветви.
ChRigth = TreeCalc( &(*n)->R, allChild); //Для правой ветви.
if ( (ChLeft-ChRigth==1 )||(ChRigth-ChLeft == 1) )
{
cout<<"("<< (**n).value<<"): Потомков слева = "<< ChLeft<<" потомков справа = "<< ChRigth<
}
//потомки текущей вершины = 1 + потомки слева + потомки справа
return allChild = 1 + ChLeft + ChRigth;
};
void freeMem(node **n)
{
if (*n == NULL) {
return;
}
freeMem(&(*n)->L);
freeMem(&(*n)->R);
free(*n);
*n = NULL;
};
int main()
{
setlocale(LC_ALL, "rus");
node *tree = NULL; //Создаем пустое дерево
cout << "hello" << endl;
int s; //Число, передаваемое в дерево
cout << "Для окончание ввода введите любой символ" << endl;
do
{
cout << "ведите число ";
cin >> s; //Считываем элемент за элементом
if (cin) {
add(&tree, s);
}
else {
cout<<"ввод окончен"<
}
} while (cin);
cout << "бинарное дерево построенно" << endl;
TreeCalc(&tree, 0);
//сюда добавить вывод сообщение если условие не выполнялось
freeMem(&tree);
system("pause");
return 0;
}
-
Тема работы. -
Цель работы. -
Индивидуальное задание. -
Результаты работы программы. -
Выводы.
-
Тема работы.
-
Цель работы.
-
Индивидуальное задание.
-
Результаты работы программы.
-
Выводы.
ВрезультатевыполнениялабораторнойработыполученыпрактическиенавыкипредставлениявпамятиЭВМструктурыданных«бинарноедерево»,реализованынаязыкепрограммированияC/C++алгоритмыработысдеревьями.Приложение А#include
using namespace std;
struct node
{
int value; //значение вершины
node *L, *R; //Левая и Правая часть дерева
};
void add(node **n, int aData)
{
if (*n == NULL)
{
*n = new node; //Выделяем память, создаем новую ветку
(*n)->value = aData; //Кладем в выделенное место аргумент
(*n)->L = NULL;
(*n)->R = NULL; //Очищаем память для следующего роста
return;
}
if (aData > (*n)->value )
{
add( &(*n)->R, aData );
}
if (aData <= (*n)->value)
{
add( &(*n)->L, aData);
}
};
int TreeCalc(node **n, int allChild) {
int ChLeft, ChRigth;
if (*n == NULL) //дойдя до дна(низа древа).
{
return allChild = 0;//потомков нет.
}
else //Если узел существует.
//Подсчёт количества потомков для текущего узла.
ChLeft = TreeCalc( &(*n)->L, allChild); //Для левой ветви.
ChRigth = TreeCalc( &(*n)->R, allChild); //Для правой ветви.
if ( (ChLeft-ChRigth==1 )||(ChRigth-ChLeft == 1) )
{
cout<<"("<< (**n).value<<"): Потомков слева = "<< ChLeft<<" потомков справа = "<< ChRigth<
}
//потомки текущей вершины = 1 + потомки слева + потомки справа
return allChild = 1 + ChLeft + ChRigth;
};
void freeMem(node **n)
{
if (*n == NULL) {
return;
}
freeMem(&(*n)->L);
freeMem(&(*n)->R);
free(*n);
*n = NULL;
};
int main()
{
setlocale(LC_ALL, "rus");
node *tree = NULL; //Создаем пустое дерево
cout << "hello" << endl;
int s; //Число, передаваемое в дерево
cout << "Для окончание ввода введите любой символ" << endl;
do
{
cout << "ведите число ";
cin >> s; //Считываем элемент за элементом
if (cin) {
add(&tree, s);
}
else {
cout<<"ввод окончен"<
}
} while (cin);
cout << "бинарное дерево построенно" << endl;
TreeCalc(&tree, 0);
//сюда добавить вывод сообщение если условие не выполнялось
freeMem(&tree);
system("pause");
return 0;
}