Разработка алгоритма, отладка и тестирование программы обработки динамических данных



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

 

                                          Теоретические положения

       Динамическая память- это оперативная память компьютера, предоcтавляемая программе при ее работе, за вычетом сегмента статических данных (64 Кб), стека(обычно 16 Кб) и собственно тела программы. Динамическая память в TurboPascale рассматривается как сплошной массив байтов, который называется кучей. Физически куча располагается в старших адресах сразу за областью памяти, которую занимает тело программы. Начало кучи хранится в стандартной переменной HeapOrg, конец – в переменной HeapEnd. Текущую границу незанятой области данамической памяти указывает указатель HeapPtr.

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

Указатели бывают:

- типизированные;

- нетипизированные.

 

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

Type Ptr = ^ integer; VarP1 : ^integer;       P2,P3: Ptr;  

 

 


Типизированные указатели могут ссылаться на еще необъявленный тип данных

 

Например: Type tt= ^ Zap;

                   Zap= record

                   Info:real;

                   Next: tt

                              End;

                   Var a: Zap;

                   p,q,begl,endl: tt;

 

Поскольку нетипизированные указателине связаны с конкретным типом данных, их чрезвычайно удобно использовать для динамического размещения данных, структура и тип которых меняется в ходе выполнения программы. Для объявления нетипизированных указателей используется стандартный тип POINTER.

Var имя перем: рointer;

           Указательная переменная может находиться в трех состояниях:

- содержать адрес какой-либо переменной, память под которую уже выделена;

- содержать специальный пустой адрес nil;

- находится в неопределенном состоянии.

 

ПРОСТЕЙШИЕ ДЕЙСТВИЯ С УКАЗАТЕЛЯМИ

 

Стандартные процедуры для работы с динамической памятью

Имя и параметры Типы параметров Действие
New(p) p - типизированный указатель выделяет динамическую память равную размеру типа, на который указывает p, и возвращает указатель на нее в переменной p
Dispose(p) p - типизированный указатель освобождает динамическую память по указателю p, ранее выделенную процедурой New
GetMem(p,n) p - указатель любого типа, n - integer выделяет динамическую память размера n байт и возвращает указатель на нее в переменной p
FreeMem(p) p - указатель любого типа освобождает динамическую память по указателю p, ранее выделенную процедурой GetMem

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

Кольцевые списки -это такие же данные, как и линейные списки, но имеющие дополнительную связь между последним и первым элементами списка.

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

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

           


Дата добавления: 2018-06-26; просмотров: 48; ЗАКАЗАТЬ РАБОТУ