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

ЛАБОРАТОРНАЯ №14

Тема: Динамические структуры данных.

Цель: Получение навыков по обработке линейных динамических структур и динамических массивов.

Темы теоретической подготовки.

Ссылочный тип в языке Паскаль. Сегментная организация памяти. Карта памяти при выполнении программ. Указатель. Ссылочная переменная. Подпрограммы доступа к динамической памяти. Аппарат создания и разрушения динамического объекта. Подпрограммы обслуживания динамической памяти.

Линейные и нелинейные динамические структуры. Операции над линейными структурами. Способы хранения их в памяти.

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

  1. Система адресации в MS DOS.

  2. Ссылочный тип. Виды указателей .

  3. Объявление указателей.

  4. Что является значением ссылочной переменной?

  5. Если ссылочная переменная содержит значение nil, что это значит?

  6. Какие операции можно выполнять над указателями? (приведите примеры)

  7. Укажите подпрограммы для работы с адресами.

  8. Когда используется динамическая память?

  9. Укажите разницу в объявлении ссылочных переменных:

Var A:^integer;

Ptr: pointer;

  1. Найдите ошибки, объясните каждый оператор, исправьте ошибки:

Var A:^integer;

Ptr: pointer; b:integer;

Begin b:=5; Ptr:=@b; a:=ptr; ptr:=a; end.

  1. Как создать динамическую переменную? Чем динамическая переменная отличается от ссылочной? Результат работы программы изобразите в виде схемы?

Var a:poiter; b:^ real; begin New(b); a:=b;b^:=5; write(b^) end.

  1. Как удалить динамическую переменную?

  2. Что значит разыменовать ссылку?

  3. Как создать динамический массив в пределах одного сегмента? А большого размера?

  4. Какие операции выполняет монитор динамической памяти ? Процедуры управления кучей.

  5. Как изменить размер кучи и стека?

  6. Какое назначение у подпрограмм: MARK, RELEASE.

  7. Как осуществить из программы анализ состояния кучи?(Проверить тостаточно ли памяти в куче для размещения структуры данных).

  8. Рекурсивные типы данных.

  9. Динамические структуры данных: линейные списки.

  10. Дайте определение для линейных списков: Стек, Очередь, Дек.

  11. Способы хранения списковых структур в памяти.

  12. Определите структуру элемента односвязного списка для обоих способов хранения.

  13. Изобразите все линейные списки в виде схемы для связанного хранения.

  14. Напишите программу для построения в динамической памяти следующей структуры:

false

nil

r

2.7

  1. Определите 9 базовых операций над списком.

  2. Нелинейные структуры данных: графы, деревья.

  3. Определение графа. Разновидности графов. Понятие пути в графе.

  4. Динамическая структура данных – дерево.(основные понятия)

  5. Бинарное дерево – его особенности.

  6. Три алгоритма обхода дерева.

  7. Алгоритм создания бинарного дерева.

  8. Раскажите о использование бинарного дерева и линейных структур данных для организации поиска в таблицах данных. Преимущество одной структуры перед другой.

  9. Классы Delphi для работы с динамическими структурами данных: список и дерево. Их назначение, свойства и методы.

Задание

  1. Разработать программу, согласно варианту, оформив в виде рекурсивных подпрограмм операции по работе со списковой структурой:

  • создание списковой структуры

  • просмотр списковой структуры

  • поиск в списковой структуре элемента с заданным значением

  1. Подпрограммы должны содержать параметры, одним из которых должен быть указатель на вершину списка.

  2. Все дополнительные операции со списком, согласно варианта, оформить в виде подпрограмм.

  3. Исследуйте возможность создания списковых структур с помощью класса TList Delphi

  4. Опишите в тетради вашу структуру в виде объекта ООП.

ВАРИАНТЫ

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

  2. Используя циклический список с головным элементом, вычислить значение многочлена заданной степени по схеме Горнера, при заданном значении Х. Элемент списка должен содержать коэффициент и степень переменной Х при этом коэффициенте. Если коэффициент равен нулю, то элемент для него не строится.

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

  4. В текстовом файле хранятся числа из диапазона 0..100. Создать однонаправленный линейный список, элементы которого содержат числа из файла. Найти элементы списка, содержащие максимальный и минимальный элементы соответственно, и поменять их местами. Получившийся массив дописать в конец файла и перед ним вставить текст: Измененный массив.

  5. Воспользуйтесь типизированным файлом лабораторной №11 и постройте индексный файл, для ускорения поиска данных в файле, в виде двунаправленного списка. Элемент списка должен содержать : ключ (одно из полей записи файла по которому организуется поиск) и значение указателя на запись с этим ключом. Затем разработайте подпрограмму поиска, использующую ваш список.

  6. Представить многочлен N – ой степени в виде линейного однонаправленного списка, элемент которого содержит значение коэффициента и показатель степени Х при этом коэффициенте. Написать подпрограмму, проверяющую на равенство два многочлена Р(х) и Q(x). Если коэффициент при степени равен 0, то для него элемент в списке не образуется.

  7. Представить многочлен N – ой степени в виде линейного однонаправленного списка, элемент которого содержит значение коэффициента и показатель степени Х при этом коэффициенте. Написать подпрограмму,которая строит многочлен R(x) как сумму многочленов Р(х) и Q(x). Если коэффициент при степени равен 0, то для него элемент в списке не образуется.

  8. Даны два линейных однонаправленных списка L1 и L2. Разработать процедуру, которая формирует список L, включив в него по одному разу элементы, значения которых входят хотя бы в один из списков L1 и L2.

  9. Даны два линейных однонаправленных списка L1 и L2. Разработать процедуру, которая формирует список L, включив в него по одному разу элементы, значения которых входят одновременно в оба списка L1 и L2

  10. Даны два линейных однонаправленных списка L1 и L2. Разработать процедуру, которая формирует список L, включив в него по одному разу элементы, значения которых входят в список L1 и не входят в список L2.

  11. Даны два линейных однонаправленных списка L1 и L2. Разработать процедуру, которая формирует список L, включив в него по одному разу элементы, значения которых входят ы в один из списков L1 и L2 и в то же вркмя не входят в другой.

  12. Представить многочлен N – ой степени в виде линейного однонаправленного списка, элемент которого содержит значение коэффициента и показатель степени Х при этом коэффициенте. Причем одночлены многочлена могут быть не упорядочены по степени Х, а одночлены одной степени могут повторяться. Требуется привести подобные члены в этом многочлене. Вывести этот многочлен в порядке возрастания степеней Х.

  13. Дана непустая последовательность слов в каждом из которых от 1 до 8 строчных латинских букв, между словами пробел, за последним словом точка. Напечатать эти слова в следующем порядке: сначала по алфавиту все слова из одной буквы, затем из двух букв и т.д.(одинаковые слова печатать один раз). Слова читаются из текстового файла и при обработке хранятся в двунаправленном упорядоченном списке.

  14. L – циклический двунаправленный линейный список. Разработать рекурсивную подпрограмму, которая удаляет из списка L все элементы, у которых одинаковые соседи(первый и последний считать соседяями). Тип информационного поля элемента списка произвольный.

  15. L – циклический двунаправленный линейный список. Разработать рекурсивную подпрограмму, которая определяет является ли список пустым и подпрограмму, которая переставляет в обратном порядке все элементы списка между первым и последним вхождением элемента Е, если таких элементов не более двух. Тип информационного поля элемента списка произвольный.

  16. Используя структуру данных стек вычислить значение выражения с учетом приоритетности операций. 2+3+7*5+12/3. Выражение читается из текстового файла. Результат представить в форме выражения и его значения и вывести его на принтер.

  17. Используя структуру данных стек вычислить значение выражения с учетом приоритетности операций. (32*7+2)/2 –(44-11). Выражение читается из текстового файла. Результат представить в форме выражения и его значения и вывести его на принтер.

  18. Используя структуру данных стек вычислить значение выражения, предварительно преобразовав его в постфиксную форму. Выражение читается из текстового файла. Результат представить в форме выражения и его значения и вывести его на принтер.

  19. В текстовом файле содержаться английские слова, являющиеся словарными. Используя структуру линейный список(упорядоченный) информационная часть которого содержит Английское слово и его перевод на русский язык. Удалить из файла одинаковые слова и выполнить грубый перевод английского текста. Результат из списка записать в типизированный файл а результат перевода вывести на принтер.

  20. В тектовом файле записано без ошибок логическое выражение по следующей форме:

<ЛВ> ::= true| false | (not <ЛВ>)|(<ЛВ> or <ЛВ>)|(<ЛВ> and <ЛВ>)

Используя структуру данных Стек вычислить значение этого выражения. Результат вывести на принтер вместе с выражением.

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

Соседние файлы в папке Лаб 11 (Динам. структуры)