Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 32:

Динамические структуры данных: бинарные деревья

< Лекция 31 || Лекция 32: 123 || Лекция 33 >

Лабораторная работа 31. Динамические структуры данных: бинарные деревья

Цель работы: изучить понятие, формирование, особенности доступа к данным и работы с памятью в бинарных деревьях, научиться решать задачи с использованием рекурсивных функций и алгоритмов обхода бинарных деревьев в языке C++.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, в которой выполнено формирование бинарных деревьев в соответствии с постановкой задачи, ввод данных элементов деревьев с учетом типа информационного поля, их обработка и вывод на экран в указанном формате. Для хранения данных бинарных деревьев следует использовать ресурсы динамической памяти. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные являются максимальный размер строковых данных, диапазоны числовых типов полей структуры и допустимый размер области динамической памяти в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 31.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. На основании приведенных в лекции 31 функций реализуйте программу, в которой выполняются все основные операции с бинарным деревом.
  2. Найдите количество четных элементов бинарного дерева. Укажите эти элементы и их уровни.
  3. Найдите сумму элементов сбалансированного дерева, находящихся на уровне k.
  4. Оператор мобильной связи организовал базу данных абонентов, содержащую сведения о телефонах, их владельцах и используемых тарифах, в виде бинарного дерева. Составьте программу, которая:
    • обеспечивает начальное формирование базы данных в виде бинарного дерева;
    • производит вывод всей базы данных;
    • производит поиск владельца по номеру телефона;
    • выводит наиболее востребованный тариф (по наибольшему числу абонентов).

Указания к выполнению работы.

Выполнение работы следует начать с решения задачи 1, реализовав алгоритмы основных операций над бинарным деревом. Каждое из заданий 2, 3 и 4 необходимо решить в соответствии с изученными методами и реализованными алгоритмами формирования, вывода и обработки данных бинарных деревьев в языке С++. Обработку бинарных деревьев следует выполнить на основе базовых алгоритмов: поиск по дереву, вставка элемента в дерево, балансировка дерева, удаление элемента из дерева, удаление всего дерева. При объявлении бинарных деревьев выполните комментирование используемых полей. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, оформив комментарии к коду.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. С чем связана популярность использования деревьев в программировании?
  2. Можно ли список отнести к деревьям? Ответ обоснуйте.
  3. Какие данные содержат адресные поля элемента бинарного дерева?
  4. Может ли бинарное дерево быть строгим и неполным? Ответ обоснуйте.
  5. Может ли бинарное дерево быть нестрогим и полным? Ответ обоснуйте.
  6. Каким может быть почти сбалансированное бинарное дерево: полным, неполным, строгим, нестрогим? Ответ обоснуйте.
  7. Куда может быть добавлен элемент в бинарное дерево в зависимости от его вида (полное, неполное, строгое, нестрогое)? Вид дерева при этом должен сохраниться.
  8. Куда может быть добавлен элемент в сбалансированное бинарное дерево? Вид дерева при этом должен сохраниться.
  9. Чем отличаются, с точки зрения реализации алгоритма, прямой, симметричный и обратный обходы бинарного дерева?
< Лекция 31 || Лекция 32: 123 || Лекция 33 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!