ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 06.02.2025
Просмотров: 839
Скачиваний: 2
СОДЕРЖАНИЕ
Структуры данных и алгоритмы их обработки
Структуры данных и алгоритмы их обработки Лабораторный практикум
230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»
220201- «Управление и информатика в технических системах»
Фундаментальные структуры данных
Лабораторная работа № 2 Алгоритмы поиска в фиксированной группе данных.
Лабораторная работа № 3 Алгоритмы базовых и улучшенных сортировок. Порядковые статистики.
Лабораторная работа №4 Полустатические структуры данных
Динамические структуры данных односвязные и двусвязные списковые структуры
Деревья , как динамические структуры данных .
Алгоритмы метода перебора с возвратами - (мпв), "жадные" алгоритмы.
Лабораторная работа № 8 Хеширование. Алгоритмы организации и обработки хеш-таблиц.
Лабораторная работа № 9 Сетевые модели. Алгоритмы на графах.
Контрольные вопросы
Принципы работы структуры данных – очереди.
Алгоритмы основных операций для работы с линейной очередью.
Что такое кольцевая очередь? Сколько параметров очереди необходимо фиксировать для работы с ней?
Для какой структуры данных должен быть реализован принцип LIFO (last in, first out)?
Что такое дек, ограниченный дек?
Организация строк какой структуры реализована средствами 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. |
Организовать программно линейный односвязный список следующей структуры: О
|
|
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 часов)
Деревья , как динамические структуры данных .
Цель работы: изучение организации древовидных структур данных ,как динамических списковых структур ,и алгоритмов построения , поиска и исключения элементов для бинарных деревьев различной структуры и сильноветвящихся В-деревьев .
Домашнее задание:
Изучить организацию двоичного дерева , как динамической структуры данных.
Освоить алгоритмы поиска и включения в идеально сбалансированное двоичное дерево и стандартные алгоритмы обхода таких деревьев.
Изучить организацию и алгоритмы поиска и включения элемента в сбалансированное АVL-дерево ;стандартные повороты для балансировки АVL-деревьев , алгоритм исключения элемента из АVL-дерева.
Изучить организацию недвоичного сильноветвящегося В-дерева и алгоритмы построения с поиском и включением элемента ; реорганизацию В-дерева при расщеплении страниц : алгоритм исключения элемента из В-дерева .
Порядок выполнения работы
Открыть проект Delphi - Struct.
На главной форме (Main Form) установить компонент, управляющий всем проектом – главное меню, и назвать первый пункт «Лаб. раб. №1» . Организовать вертикальную составляющую к этому пункту «Задача 1».
Добавить к проекту модуль с формой TreeStruct, которая должна появляться на экране при выборе пункта меню «Задача 1». Убедитесь в том, что ваша управляющая конструкция в проекте работает.
Установить на форму модуля TreeStruct компоненты, обеспечивающие ввод исходных данных, управляющую командную кнопку, и компоненты для вывода результатов на экране – для реализации программного приложения в соответствии с вариантом задания таблицы 1.1. Для отображения организованной вами древовидной структуры используйте визуальный компонент библиотеки VCL - TreeView ,расположенный на странице Win32 указанной библиотеки .
В обработчике события onClick командной кнопки на языке Object Pascal написать фрагмент программы для ввода исходных данных, обработки их по алгоритму , соответствующему варианту вашего задания (таблица 1.1) и вывода результатов в соответствующий объект (TreeView) на форму модуля TreeStruct. Отладить программу и продемонстрировать результаты преподавателю.
-
Составить отчет , в котором должно быть:
а) текст задания;
б)распечатка текста модуля TreeView;
в)отображение формы с результатами работы модуля;
г)блок-схема алгоритма работы модуля.
Защитить работу преподавателю.
Таблица 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). В программе учесть возможность реорганизации структуры В-дерева в результате исключения элемента со страницы. |
пишите
в программе запись, в полеbukv
которой заносится буква. Порождая
записи, поместить их в стек, а затем
«вытолкнуть» их из списка, получив
буквы в порядке, обратном исходному.
Проверьте работу примера для исходного
набора букв:
const
A:
array
[1 .. 9]
of char =(‘A’, ’P’, ‘Y’, ‘T’, ‘K’, ‘Y’,
’P’, ‘T’, ‘C’).