- •Указатели
- •Работа с указателями:
- •Выделение динамической памяти при использовании типизированных указателей
- •Освобождение памяти
- •Связное распределение памяти
- •При связном распределении памяти каждый элемент данных обязательно хранит ссылку (адрес) на элемент,
- •Связные списки
- •Списки- наиболее гибкая структура данных.
- •Виды списков
- •Элемент списка
- •Описание списка
- •Упорядоченные списки
- •Последовательность действий:
- •2) Изменить ссылки:
- •Особые случаи алгоритма:
- •Процедура включения элемента в упорядоченный список
- •Исключение элемента из списка:
- •Особый случай - удаление первого элемента:
- •Пример: удаление из списка последнего элемента.
- •Формальный параметр процедуры- указатель на первый элемент обрабатываемого списка
- •В общем случае должен быть рассмотрен список, содержащий более одного элемента, например:
- •Частный случай: список состоит из одного элемента.
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Пример: включение в список заданного элемента перед предпоследним элементом
- •Формальные параметры процедуры:
- •В общем случае должен быть рассмотрен список,
- •Включение элемента:
- •Частный случай - список, состоящий из двух элементов:
- •Если в списке менее двух элементов, процедура не выполняется:
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Стек
- •Над стеком определены следующие операции:
- •Очереди
Пример: удаление из списка последнего элемента.
Описание структур данных.
Type
U=^zap;{указатель на элемент списка}
zap=record |
{элемент списка} |
inf: integer;
ukz: list
end;
Var psp: ukz;{указатель на начало списка}
22
Формальный параметр процедуры- указатель на первый элемент обрабатываемого списка
23
В общем случае должен быть рассмотрен список, содержащий более одного элемента, например:
Psp
P Q
Здесь Psp-указатель на начало списка, Q- указатель на последний, удаляемый элемент, Р- указатель элемента, стоящего перед удаляемым
Признак последнего элемента: Q^.ukz=nil Удаление элемента: P^.ukz:=nil; dispose(Q);
24
Частный случай: список состоит из одного элемента.
Признак данного случая: Psp^.ukz=nil
Удаление в частном случае: |
Psp |
|
Q:=Psp;
Psp:=nil;
Dispose(Q);
Q
Если список пуст, процедура прекращает |
25 |
|
работу |
||
|
Процедура, решающая указанную задачу:
Procedure del_last(var Psp:u);
Var p,q:u;
Begin {Procedure del_last}
if Psp=nil then Exit;{список пуст} if Psp^.ukz=nil then
{частный случай} |
|
Begin |
|
Q:=Psp; |
|
Psp:=nil; |
|
Dispose(Q); |
|
End; |
26 |
{общий случай}
P:=Psp; Q:=Psp^.ukz;
While Q^.ukz<>nil do
Begin
P:=Q;
Q:=Q^.ukz;
End;
P^.ukz:=nil;
Dispose(Q);
End; |
{Procedure del_last} |
27 |
|
|
Пример: включение в список заданного элемента перед предпоследним элементом
Описание структур данных - как в предыдущем примере
28
Формальные параметры процедуры:
Lst – указатель на начало списка, в который включается элемент,
Element – указатель на включаемый элемент (предполагается, что элемент сформирован до вызова процедуры, то есть для него выделена память, заполнено информационное поле, а в поле указателя записано значение nil)
29
В общем случае должен быть рассмотрен список,
содержащий более двух элементов, например:
Lst
P Q
Здесь Lst-указатель на начало списка,
Q-указатель на предпоследний элемент, перед которым выполняется включение,
Р-указатель элемента, стоящего перед предпоследним
Признак предпоследнего элемента:
Q^.ukz^.ukz=nil
30
Включение элемента:
Elem^.ukz:=Q;
P^.ukz:=Elem;
Lst
P |
Q |
Elem
31
