Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Program dinam_peremennie;






Var p1, p2, p3: ^integer;

Begin new (p1); {создаются переменные типа integer и их адреса

new (p2); присваиваются указателям p1, p2, p3 }

New (p3);

p1^: =10;

p2^: =p1^+1;

p3^: =p1^+p2^;

writeln (‘сумма чисел p1^ и p2^=', p3^);

Readln;

End.

Таким образом, значение, на которое указывает указатель, обозначается с помощью крышки ^, поставленной после имени указателя.

Если за именем указателя нет ^, то это адрес ячейки памяти, если же есть ^, то это значение, которое расположено по данному адресу.

р1^ - значение, на которое указывает указатель р1.

р1 – указатель (адрес ячейки, где расположено число).

Отметим, что нельзя смешивать указатели и данные в одно выражение:

p1: = sqr(p1^); – так делать нельзя!!!

После того, как динамическая переменная стала не нужна, ее можно уничтожить, а освободившиеся ячейки вернуть в «кучу», для этого используется процедура dispose(p); где р – переменная-указатель. После выполнения этой процедуры ячейки, содержащие значение p^ будут считаться свободными, но при этом значение p^ не изменится. Следовательно, использование p^ может привести к порче других динамических переменных, поэтому рекомендуется сразу после обращения к процедуре dispose указателю присвоить: p: = Nil; Процедура dispose(p) предназначена для освобождения указателя, который раньше получил свое значение с помощью процедуры new(p).

В том случае, если указатель имеет тип pointer и получил значение с помощью процедуры Getmem (p, size), тогда для его освобождения используется процедура Freemem (p, size).

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

 

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

1. Очередь организована по принципу FIFO (First Input First Output – первым вошел и первым вышел). Схематически можно представлять это в виде трубочки с одним входом и с одним выходом:

 

 
 


 

2. Стек организован по принципу LIFO (Last Input First Output - последним вошел, первым вышел). Схематически это можно изобразить в виде трубочки с запаянным концом.

 

 

 
 

 

 


3. Список является обобщением очереди и стека. В списке возможен доступ к любому элементу, он допускает вставку любого элемента в любое место. А также исключение элемента из любого места списка.

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

1) при описании переменных структурного типа необходимо заранее указать число их компонентов, а в данном случае оно неизвестно;

2) компоненты статических переменных структурных типов располагаются в памяти в подряд расположенных ячейках. Поэтому добавление элемента в такую структуру или удаление элемента из нее связано с перемещением всех остальных элементов статической структуры на новое место в памяти. Это требует больших затрат машинного времени.

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

1) отсутствует описание динамических элементов;

2) элементы динамических структур размещаются в памяти в виде цепочки связанных структур. Такое размещение в памяти предполагает, что каждый элемент может быть помещен в любое свободное место, но при этом в каждом элементе есть указатель на следующий или предыдущий элемент связанной структуры.

 



Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал