Міністерство освіти і науки України
Національний технічний університет України «КПІ»
Кафедра медичної кібернетики та телемедицини
Лабораторна робота №1
Тема: Динамічні структури данних
Варіант №16 (задачі № 16.13(а), 16.18(а), 16.33).
Виконав:
студент ІМ-81
Плахтій Артур Миколайович
Перевірив:
старший викладач
Зінченко Ніна Павлівна
Київ 2009
Теоретична частина
1. Динамические структуры данных
Ранее изучаемые типы данных относятся к так называемым статическим. Память под них выделяется во время компиляции, количество таких объектов не меняется во время выполнения программы. Однако существует ряд задач, где статические структуры неэффективны. В языке Паскаль имеются средства создания динамических структур данных, которые позволяют во время выполнения программы:
· образовывать объекты;
· выделять для них память;
· уничтожать, когда в них исчезает необходимость.
Другое название динамической памяти – куча.
Для получения ясного представления о динамических переменных надо рассмотреть структуру памяти во время выполнения программы на языке Паскаль (см. рис.1).
Данные в динамической памяти размещают с использованием указателей. Указатель - это ссылка на определенную ячейку памяти, начиная с которой записывается значение переменной, поэтому данные такого типа называются еще и ссылочным типом данных.
Формат описания ссылочного типа данных:
Type <тип указателя> = ^ <идентификатор типа>,
то есть указатель связан с некоторым типом данных. Такие указатели называются типизированными.
Пример описания переменных ссылочного типа:
Type
p1=^integer;
p2=^real;
Var
A,B,C:p1;
X,Y,Z:p2;
P:char;
Cсылочные переменные A, B, C указывают на динамические объекты целого типа, X,Y,Z - вещественного, P - символьного. Значением ссылочной переменной является адрес в динамически выделенной памяти, где хранится объект этого типа.
Рис. 1. Структура памяти во время выполнения программы
Для обращения к ссылочной переменной используют запись “ A^ ”, что означает: ”идти по адресу, хранящемуся в A”. Память под указатели отводится на этапе компиляции.
Однако в Турбо Паскале можно объявлять указатель и не связывать его с конкретным типом данных. Такой указатель называется нетипизированным. Для его объявления служит стандартный тип pointer. Структура и тип таких данных могут меняться во время выполнения программы.
При работе с указателями обязательны этапа два:
1. объявление указателя;
2. формирование динамических данных, память которых отводится во время выполнения программы.
Для работы с указателями используются следующие процедуры:
New(P) - процедура, которая создает в динамической памяти новую переменную. Р - указатель переменной того типа, который надо создать. Каждая отдельная процедура new может создать только одну динамическую переменную.
Dispose(P) - процедура, позволяющая вернуть в кучу участок памяти, занятый объектом с указателем Р.
Параметрами процедур new и dispose может быть только типизированный указатель. ............