- •Указатели
- •Работа с указателями:
- •Выделение динамической памяти при использовании типизированных указателей
- •Освобождение памяти
- •Связное распределение памяти
- •При связном распределении памяти каждый элемент данных обязательно хранит ссылку (адрес) на элемент,
- •Связные списки
- •Списки- наиболее гибкая структура данных.
- •Виды списков
- •Элемент списка
- •Описание списка
- •Упорядоченные списки
- •Последовательность действий:
- •2) Изменить ссылки:
- •Особые случаи алгоритма:
- •Процедура включения элемента в упорядоченный список
- •Исключение элемента из списка:
- •Особый случай - удаление первого элемента:
- •Пример: удаление из списка последнего элемента.
- •Формальный параметр процедуры- указатель на первый элемент обрабатываемого списка
- •В общем случае должен быть рассмотрен список, содержащий более одного элемента, например:
- •Частный случай: список состоит из одного элемента.
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Пример: включение в список заданного элемента перед предпоследним элементом
- •Формальные параметры процедуры:
- •В общем случае должен быть рассмотрен список,
- •Включение элемента:
- •Частный случай - список, состоящий из двух элементов:
- •Если в списке менее двух элементов, процедура не выполняется:
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Стек
- •Над стеком определены следующие операции:
- •Очереди
Элемент списка
данные
Адрес
следующего
элемента
12
Описание списка
Type U = ^ZAP;
ZAP = RECORD
INF : integer; UKZ : U
END;
VAR
PSP, P : U;
13
Упорядоченные списки
Операция сортировки для списков не выполняется: при необходимости списки создаются упорядоченными.
Идея- включение элемента в упорядоченный список
14
Последовательность действий:
1) Найти место для включаемого элемента
Список: |
|
PSP |
2 |
3 |
8 |
|
|
|
|
|
|
Q- элемент |
P- элемент после |
|
|
|
|
|
|
||
|
|
|
|
|
|
||
Включаемый |
|
5 |
|
|
|
включаемого |
|
|
|
|
|
перед |
|||
элемент: |
|
|
|
|
(P^.inf>Vkl^.inf) |
||
|
|
|
|
|
включаемым |
||
|
|
|
|
|
|||
|
|
|
|
|
|||
|
|
|
|
|
|
|
15 |
2) Изменить ссылки:
PSP |
2 |
3 |
8 |
Vkl^.ukz:=P; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16
PSP |
2 |
Q^.ukz:=Vkl;
3 |
8 |
5 |
17
Особые случаи алгоритма:
1) Вставка в пустой список (PSP=nil) PSP:=Vkl;
2)Включение перед первым элементом (Vkl^.inf<Psp^.Inf)
Vkl^.ukz:=psp;
Psp:=vkl
18
Процедура включения элемента в упорядоченный список
См. методичку
19
Исключение элемента из списка:
q p
PSP |
2 |
3 |
5 |
8 |
q^.ukz:=p^.ukz;
Dispose(p);
20
Особый случай - удаление первого элемента:
p:=psp;
psp:=psp^.ukz;
Dispose(p);
Процедура исключения элемента из упорядоченного списка – в методичке
21
