Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет к пр 8

.docx
Скачиваний:
25
Добавлен:
24.01.2023
Размер:
88.91 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Кафедра безопасности информационных систем

ОТЧЁТ

по практической работе № 8 на тему: «Нелинейные динамические структуры данных. Бинарные деревья»

по дисциплине «Алгоритмы и структуры данных»

Выполнил: студент группы ИСТ-114, Медведева С.Г.,

«14» декабря 2022 г. ___________/Медведева С.Г.

Принял: к.ф.-м.н., доцент, И.А. Моисеев

«14» декабря 2022 г. ___________/ И.А. Моисеев /

1 Основная часть

    1. Цель работы

Необходимо создать структуру с полями

1. ФИО - фамилия и инициалы, символьный массив.

2. Год рождения - целочисленная переменная.

3. Регион

4. Номер телефона - символьный массив.

5. Группа

Требуется создать четыре линейных списка, состоящих из 6 таких структур. Имя каждого файла

должно начинаться с номера группы.

1) Ознакомиться с теоретическим материалом задания.

2) Разработать программу, которая:

a. Считывает данные из примера ранее рассматриваемого текстового файла (*.txt) и

формирует четыре линейные динамические структуры (либо связные списки, либо

очереди, либо стеки), ключом формирования является номер группы (ИСТ-111,

ИСТ-112, ИСТ-113, ИСТ-114). Данные считываются в том порядке, в каком они представлены в текстовом файле*.txt.

b. Для каждого динамического списка (для каждой группы) программа строит и выводит на экран бинарное дерево поиска и сбалансированное бинарное деревопо

ключу Фамилия.

    1. Результаты выполнения работы

  1. #include <iostream> #include <fstream> #include <string.h> using namespace std; struct people{ string FIO; string yearB; string r; string numberPhone; string group; }; struct node{ people key; int count; node * left; node * right; }; void Vyvod(node **w,int l=0){ if (*w!=NULL) { Vyvod(&((**w).right),l+1); for (int i=0; i<l*2; i++) cout << "\t"; cout << (**w).key.FIO << endl; // for (int i=0; i<l*2; i++) // cout << "\t"; // cout << (**w).key.yearB << endl; // for (int i=0; i<l*2; i++) // cout << "\t"; // cout << (**w).key.r << endl; // for (int i=0; i<l*2; i++) // cout << "\t"; // cout << (**w).key.numberPhone << endl; // for (int i=0; i<l*2; i++) // cout << "\t"; // cout << (**w).key.group << endl; Vyvod(&((**w).left),l+1); } } void findNode(node ** root,node * node) { if (*root == nullptr){ *root = node; return; } if (strcmp((*root)->key.FIO.c_str(),node->key.FIO.c_str()) <0) findNode(&((*root)->right),node); else findNode(&((*root)->left),node); } void addTree(node** root, people p){ node *newRoot = *root; node *newNode = new node(); newNode->key = p; newNode->count = 1; newNode->left = nullptr; newNode->right = nullptr; if (newRoot == nullptr){ *root = newNode; } else{ findNode(root,newNode); } } int height(node * root){ if (root == nullptr) return 0; return max(height(root->right)+1,height(root->left)+1); } int balance(node * root){ return height(root->right) - height(root->left); } void addTreeB (node** root, people newP){ if (*root == nullptr){ node *newNode = new node(); newNode->key = newP; newNode->count = 1; newNode->left = nullptr; newNode->right = nullptr; *root= newNode; return; } if (balance(*root) == 0){ addTreeB(&((*root)->right), newP); return; } else if (balance(*root) == 1) { addTreeB(&((*root)->left), newP); return; } else{ addTreeB(&((*root)->right), newP); return; } } void readFile(ifstream &file, node **root,node **rootB){ people newP; if (file.is_open()){ while(!file.eof()){ getline(file, newP.FIO); getline(file, newP.yearB); getline(file, newP.r); getline(file, newP.numberPhone); getline(file, newP.group); addTree(root,newP); if (*rootB == nullptr){ node *newNode = new node(); newNode->key = newP; newNode->left = nullptr; newNode->right = nullptr; *rootB=newNode; } else addTreeB(rootB,newP); } } else cout << "Файл не найден"; } int main() { cout << "Группа ИСТ-114:" << endl; ifstream fin(R"(C:\Users\sonik\CLionProjects\Lab8\f.txt)"); node** root = new node*(); node ** rootB = new node * (); *root = nullptr; *rootB = nullptr; readFile(fin,root,rootB); cout << "Бинарное дерево поиска: " << endl; Vyvod(root); cout << endl; cout << "Бинарное cбалансированное дерево: " << endl; Vyvod(rootB); delete(root); delete(rootB); cout << endl; cout << endl << "Группа ИСТ-111:" << endl; ifstream fin111(R"(C:\Users\sonik\CLionProjects\Lab8\ist111.txt)"); root = new node*(); rootB = new node * (); *root = nullptr; *rootB = nullptr; readFile(fin111,root,rootB); cout << "Бинарное дерево поиска: " << endl; Vyvod(root); cout << endl; cout << "Бинарное cбалансированное дерево: " << endl; Vyvod(rootB); //cout << balance(*rootB); delete(root); delete(rootB); }

САНКТ-ПЕТЕРБУГР

2022

Соседние файлы в предмете Алгоритмы и системы данных