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

Решение задач на динамические структуры данных

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

Лабораторная работа 32. Решение задач на динамические структуры данных

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

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

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

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

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

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

  1. На основе кодов функций, представленных в лекции 32, реализуйте все основные операции над красно-черным деревом.
  2. Разработайте программу, с помощью которой можно определить наибольший допустимый размер дека с вещественным информационным полем. Найдите этот размер (число элементов в деке). Сравните с наибольшим допустимым размером стека и очереди с аналогичным информационным полем.
  3. Элементами дека являются натуральные числа. Удалите из дека элементы, оставив только простые числа. Расположите их в порядке неубывания.
  4. Удалите из циклического однонаправленного списка все отрицательные числа.
  5. Решите задачу Иосифа Флавия с помощью циклического списка.
  6. В красно-черном дереве найдите путь от корня к некоторому листу, содержащий минимальное количество красных вершин.

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

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

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

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

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

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

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

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

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

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

Спасибо!