- •Динамические структуры данных Классификация структур данных
 - •Понятие о динамической памяти
 - •Адреса и указатели
 - •Описание и состояния указателей
 - •Работа с указателями в программе
 - •Объявление указателя
 - •Выделение памяти
 - •Работа с информацией (разыменование)
 - •Работа с адресом
 - •Освобождение памяти
 - •Особенности динамических данных
 - •Связанные динамические структуры
 - •Организация взаимосвязей в связанных динамических данных
 - •Основные типы связанных динамических структур
 - •Работа с очередью
 - •Работа со стеком
 - •Создание стека
 - •Добавление элемента
 - •Удаление элемента стека
 
Описание и состояния указателей
Работа с указателем начинается с его объявления. Объявлять можно указатели 2-х типов.
Первый тип - стандартный. Для его описания используется слово pointer. Такой указатель может содержать адрес переменной любого типа.
Пример описания: P: pointer;
Второй тип - пользовательский. Для его описания используется символ ^. После этого символа нужно указать тип объекта, адрес которого будет содержать указатель.
Пример описания пользовательских указателей:
Var k,i:^integer; //указатели на целые перемен.
F: ^real; //указатель на веществ. перемен.
Ch:^char; // указатель на символьную переменную
Указатель может находиться в одном из трех состояний:
Содержит адрес какой-либо переменной, память под которую уже выделена. Говорят, что указатель ссылается на эту область. Эту ссылку на рисунке обозначают стрелкой:
P
P^
а
дресСодержит специальный пустой адрес Nil:
- 
		
P
N
il 
Находится в неопределенном состоянии, на рисунке это стрелка с вопросом:
- 
		
P
?
?
 
Работа с указателями в программе
Операции с указателями: присваивание, разыменование (раскрытие ссылки), получение адреса указателя, операции сравнения.
Объявление указателя
Var
a,b:^integer; {объявление указателей}
После объявления указатели находятся в неопределенном состоянии:
			  | 
		?  | 
		b  | 
		?  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	
Выделение памяти
Процедура New(указатель). Она выделяет область памяти, размер которой определяется типом, заданным в объявлении указателя. Адрес этой области записывается в переменную-указатель, указанную в скобках. Для пример выше:
new(a);
new(b);
При этом в памяти сначала выделяется область для хранения значения целого типа (т.к. в функции new параметр a – это указатель на целое число). Адрес этой области помещается в переменную-указатель а. В дальнейшем для обращения к содержимому этой области будет использоваться значение адреса, хранящееся в указателе а. Это обращение будет выглядеть как «a^». На рисунке обозначим так:
a  | 
		адрес 1  | 
		b  | 
		?  | 
		a^  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	
			  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	
Затем происходит выделение памяти под размещение еще одной целочисленной переменной. Ее адрес будет помещен в b. Обозначим по аналогии:
a  | 
		адрес 1  | 
		b  | 
		адрес 2  | 
		a^  | 
		
  | 
		b^  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	
			  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
		
  | 
	

a