Разработка алгоритма, отладка и тестирование программы обработки динамических данных
Цель работы:Получить навыки в составлении алгоритма и отладки программы обработки линейного связанного списка.
Теоретические положения
Динамическая память- это оперативная память компьютера, предо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; просмотров: 235; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!