ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.02.2025

Просмотров: 839

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Структуры данных и алгоритмы их обработки

Структуры данных и алгоритмы их обработки Лабораторный практикум

230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»

220201- «Управление и информатика в технических системах»

Лабораторная работа № 1

Фундаментальные структуры данных

Лабораторная работа № 2 Алгоритмы поиска в фиксированной группе данных.

Лабораторная работа № 3 Алгоритмы базовых и улучшенных сортировок. Порядковые статистики.

Часть I (пункты 3÷6)

Часть II (пункты 7÷10)

Лабораторная работа №4 Полустатические структуры данных

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

Лабораторная работа № 5

Динамические структуры данных  односвязные и двусвязные списковые структуры

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

Лабораторная работа № 6

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

Лабораторная работа № 7

Алгоритмы метода перебора с возвратами - (мпв), "жадные" алгоритмы.

Лабораторная работа № 8 Хеширование. Алгоритмы организации и обработки хеш-таблиц.

Порядок выполнения работы.

Лабораторная работа № 9 Сетевые модели. Алгоритмы на графах.

Порядок выполнения работы.

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

  1. Принципы работы структуры данных – очереди.

  2. Алгоритмы основных операций для работы с линейной очередью.

  3. Что такое кольцевая очередь? Сколько параметров очереди необходимо фиксировать для работы с ней?

  4. Для какой структуры данных должен быть реализован принцип LIFO (last in, first out)?

  5. Что такое дек, ограниченный дек?

  6. Организация строк какой структуры реализована средствами Object Pascal?

Лабораторная работа № 5

(4 часа)

Динамические структуры данных  односвязные и двусвязные списковые структуры

Цель работы:

Изучение организации списковых структур и построение реальных структур данных на базе списков.

Домашнее задание:

1. Освоить организацию адресного типа (указатели) в Object Pascal и построение динамического списка.

2. Изучить алгоритмы. Позволяющие работать со списковыми структурами различной организации:

а) линейный и кольцевой стек;

б) линейная и кольцевая очередь;

в) дек.

Порядок выполнения работы

1. Открыть проект Delphi Stuctures.

2. На главной форме в главное меню проекта добавить пункт «Лабораторная работа №5», при выборе которого должно появляться окно модуля «DinamicStuct». Для этого модуль DinamicStuct с формой добавить в проект.

3. Установить на форму модуля DinamicStuct компоненты, обеспечивающие ввод исходных данных и вывод результатов работы программы в соответствии с вашим вариантом задания (табл. 5.1), а также управляющую кнопку для запуска программного кода при нажатии на кнопку (событие onClic) в работающей программе. Для ввода и вывода в этих задачах использовать компоненты класса Tmemo.

4. В обработчике события onClic управляющей кнопки написать программный код, моделирующий работу структуры данных динамического характера, соответствующей заданию вашего варианта.

5. отладить приложение на тестовых примерах и продемонстрировать работу смоделированной структуры данных преподавателю.

6. Составить отчет о выполненной лабораторной работе, в который должны войти:

а) задание, в соответствии с вариантом;


б) блок-схема решения задачи;

в) программа решения задачи;

г) распечатка формы с демонстрацией работы смоделированной структуры данных.

7. Защитить работу преподавателю.

Таблица 5.1

№ вар.

Содержание задания

1.

Организовать программно линейный односвязный список следующей структуры:

Опишите в программе запись, в полеbukv которой заносится буква. Порождая записи, поместить их в стек, а затем «вытолкнуть» их из списка, получив буквы в порядке, обратном исходному. Проверьте работу примера для исходного набора букв: const A: array [1 .. 9] of char =(‘A’, ’P’, ‘Y’, ‘T’, ‘K’, ‘Y’, ’P’, ‘T’, ‘C’).

2.

С помощью стека, организованного в соответствии со структурой вар. 1 организовать получение палиндрома, в котором вторая половина является зеркальным отражение первой без последнего символа. Первую половину вводить с клавиатуры. Например:

3.

Программно организазать очередь в виде однонаправленого списка из элементов типа rec:

Type ptr =^ rec;

rec = record

key : integer;

s : ptr;

end;

var t : rec;

Заполняются ссылки на первое ипоследнее звенья списка.

Во входном файле задана последовательность из равного количества положительных и отрицательных целых чисел, за которой следует нуль. Ввести эти числа и вывести их, чередуя положитедльные числа (на нечетных местах) с отрицательными ( на четных), причем исходный взаимный порядок как среди положительных, так и среди отрицательных чисел должен быть сохранен.

4.

Многочлен

P(х) = anxn + an-1xn-1 +… + a1x + a0

с целыми коэффициентами можно представить в виде списка, элементы которого расположены по убыванию степеней одночленов:

Описать на Object Pascal тип данных, соответствующий такому представлению многочленов, и определить следующие функции и процедуры для работы с этими списками-многочленами:

а) логическую функцию Equal(p,q), проверяющую на равенство многочлены p и q;

б) функцию Value(p,x), вычисляющую значение p в точке x;

в) процедуру Dif(p,q), которая строит многочлен p-производную многочлена q;

г) процедуру Addit(p,q,r), которая строит многочлен p-сумму многочленов q и r.

5.

Кольцевым списком называется однонаправленный список, в последнем звене которого вместо Nil указывается ссылка на первое звено:

Пусть L  кольцевой список с элементами типа Type prt =^ rec

rec = record;

key : integer;

s : ptr;

end;

а E  величина типа rec.

Описать и отладить:

а) процедуру, которая строит кольцевой список L и выводит в компонент класса TstringGrid таблицу:

t1 t2 … tn-1 tn

t2 t3 … tn t1

t3 t4 … t1 t2

-- - - - - - - - - -

tn t1 … tn-2 tn-1

б) процедуру, которая строит кольцевой список L и функцию, которая удаляет из непустого списка L последний элемент.

в) процедуру, которая строит кольцевой список L и функцию, которая добавляет в конец списка L новый элемент.



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

1 Определения типизированного и обобщенного указателя.

2 Что такое линейный цепной список, и алгоритмы основных операций при работе с ним.

3 Принцип работы кольцевого списка.

4 Организация стека на базе линейного и кольцевого списка.

5 Организация очереди на базе линейного и кольцевого списка.

Лабораторная работа № 6

(8 часов)

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

Цель работы: изучение организации древовидных структур данных ,как динамических списковых структур ,и алгоритмов построения , поиска и исключения элементов для бинарных деревьев различной структуры и сильноветвящихся В-деревьев .

Домашнее задание:

  1. Изучить организацию двоичного дерева , как динамической структуры данных.

  2. Освоить алгоритмы поиска и включения в идеально сбалансированное двоичное дерево и стандартные алгоритмы обхода таких деревьев.

  3. Изучить организацию и алгоритмы поиска и включения элемента в сбалансированное АVL-дерево ;стандартные повороты для балансировки АVL-деревьев , алгоритм исключения элемента из АVL-дерева.

  4. Изучить организацию недвоичного сильноветвящегося В-дерева и алгоритмы построения с поиском и включением элемента ; реорганизацию В-дерева при расщеплении страниц : алгоритм исключения элемента из В-дерева .

Порядок выполнения работы

  1. Открыть проект Delphi - Struct.

  2. На главной форме (Main Form) установить компонент, управляющий всем проектом – главное меню, и назвать первый пункт «Лаб. раб. №1» . Организовать вертикальную составляющую к этому пункту «Задача 1».

  3. Добавить к проекту модуль с формой TreeStruct, которая должна появляться на экране при выборе пункта меню «Задача 1». Убедитесь в том, что ваша управляющая конструкция в проекте работает.

  4. Установить на форму модуля TreeStruct компоненты, обеспечивающие ввод исходных данных, управляющую командную кнопку, и компоненты для вывода результатов на экране – для реализации программного приложения в соответствии с вариантом задания таблицы 1.1. Для отображения организованной вами древовидной структуры используйте визуальный компонент библиотеки VCL - TreeView ,расположенный на странице Win32 указанной библиотеки .

  5. В обработчике события onClick командной кнопки на языке Object Pascal написать фрагмент программы для ввода исходных данных, обработки их по алгоритму , соответствующему варианту вашего задания (таблица 1.1) и вывода результатов в соответствующий объект (TreeView) на форму модуля TreeStruct. Отладить программу и продемонстрировать результаты преподавателю.

  6. Составить отчет , в котором должно быть:

    1. а) текст задания;

    2. б)распечатка текста модуля TreeView;

    3. в)отображение формы с результатами работы модуля;

    4. г)блок-схема алгоритма работы модуля.

  7. Защитить работу преподавателю.


Таблица 6.1

№ вар.

Текст задания

1.

а )Организовать и отладить программу для построения и печати идеально сбалансированного двоичного дерева ( Function Tree , Function PrintTree ) .

б )Запрограммировать и отладить алгоритм обхода построенного бинарного дерева слева направо (в качестве примера построить и обойти дерево , отображающее заданное арифметическое выражение с бинарными операциями).

2.

а )Организовать программно двоичное дерево с помощью процедуры поиска и включения ключа (Search).

б )Написать и отладить программу для поэлементного вывода значений узлов построенного дерева обходом дерева слева направо(Inorder).

Замечание: при правильной организации бинарного дерева с целочисленными ключами в результате отображения ключей при обходе в порядке Inorder , должна получиться отсортированная в порядке возрастания последовательность ключей.

3.

а )Написать и отладить программу, которая позволит построить идеально сбалансированное двоичное дерево (с целочисленными ключами).

б )Организовать процедуру удаления элемента из организованного двоичного дерева( Procedure Delete).

4.

Организовать и отладить программу для построения и отображения сбалансированного AVL-дерева(высоты в поддеревьях отличаются не более , чем на 1) с помощью алгоритма поиска и включения элемента; учесть необходимость балансировки AVL-дерева с использованием LL, RR, LR, RL-поворотов.

5.

Программно организовать построение дерева Фибоначчи(Ф-дерево), как пример AVL-дерева.

Замечание: дерево Фибоначчи определяется следующим образом:

1) пустое дерево есть Ф-дерево высотой 0;

2)единственная вершина есть дерево высотой 1;

3)если Th-1 и Th-2 -Ф-деревья с высотами (h-1) и (h-2), то

Th =(Th-1,x,Th-2) также Ф-дерево высотой h;

4)других деревьев Фибоначчи не существует.

6.

Программно построить недвоичное сильноветвящееся В-дерево с помощью алгоритма поиска и включения элемента на страницу(Procedure SearchB). В программе учесть, что при переполнении страницы происходит расщепление страницы и ,соответственно реорганизация структуры В-дерева.

7.

Написать и отладить программу исключения элемента из недвоичного сильноветвящегося В-дерева(Procedure UnderFlow). В программе учесть возможность реорганизации структуры В-дерева в результате исключения элемента со страницы.