logo search
Программа ГЭ_спец_2012 ответы light

Динамический тип данных, линейные динамические структуры данных: стек, очередь, списки; нелинейные динамические структуры данных: мультисписки, деревья.

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

var <имя_указателя>: ^<тип_адресуемой_переменной>;

Кроме того, существуют универсальные нетипизированные указатели, которые могут хранить адрес переменной любого типа:

var <имя_указателя>: pointer;

Значением переменной-указателя является или nil (то есть пустое значение), или адрес значения, указывающий на динамическую переменную. Ссылка на динамическую переменную, на которую указывает переменная-указатель, записывается в виде переменной-указателя, после которой ставится символ указателя (^). Динамические переменные и значения их указателей создаются с помощью стандартных процедур New и GetMem. Вы можете использовать операцию @ и стандартную функцию Ptr для создания значений указателя, которые рассматриваются как указатели динамических переменных.

Рассматриваемые ниже структуры, по сути, являются различными видами списков. Они применяются, например, в таких ситуациях:

• программист заранее ничего не знает о том, какой именно объем памяти может потребоваться его программе;

• некоторые (особенно "тяжелые") переменные нужны поочередно, и после того как первые "отработали свое", их можно смело стирать из памяти, не дожидаясь конца работы программы, - освобождать место для других "тяжелых" переменных;

• в процессе обработки данных нужно провести большую работу по перестройке всей структуры "на ходу"; и т.д.

Однонапраленний список – элементы содержат указатель на следующий по порядку элемент.

Двунаправленный список – элементы содержат указатели на предыдущий и последующий элементы.

Дерево – элементы содержат указатели, число которых равно максимальному числу потомков для любого узла дерева (для бинарного - две ссылки)

Мультисписок. В программных системах, обрабатывающих объекты сложной структуры, могут решаться разные подзадачи, каждая из которых требует, возможно, обработки не всего множества объектов, а лишь какого-то его подмножества. Для того, чтобы при выборке каждого подмножества не выполнять полный просмотр с отсеиванием записей, к требуемому подмножеству не относящихся, в каждую запись включаются дополнительные поля ссылок, каждое из которых связывает в линейный список элементы соответствующего подмножества. В результате получается многосвязный список или мультисписок, каждый элемент которого может входить одновременно в несколько односвязных списков.

Иерархический список – представляет собой набор «вложенных» списков. В этом случае вершины списка первого уровня содержат помимо указателей следующего элемента, еще и указатель на первый элемент вложенного списка. Типы списков могут как совпадать, так и различаться. Примером может служить реализация для представления графа списка смежности: в одном линейном списке содержатся номера "начальных вершин", а в остальных - номера смежных вершин или указатели на эти вершины