- •Указатели
- •Работа с указателями:
- •Выделение динамической памяти при использовании типизированных указателей
- •Освобождение памяти
- •Связное распределение памяти
- •При связном распределении памяти каждый элемент данных обязательно хранит ссылку (адрес) на элемент,
- •Связные списки
- •Списки- наиболее гибкая структура данных.
- •Виды списков
- •Элемент списка
- •Описание списка
- •Упорядоченные списки
- •Последовательность действий:
- •2) Изменить ссылки:
- •Особые случаи алгоритма:
- •Процедура включения элемента в упорядоченный список
- •Исключение элемента из списка:
- •Особый случай - удаление первого элемента:
- •Пример: удаление из списка последнего элемента.
- •Формальный параметр процедуры- указатель на первый элемент обрабатываемого списка
- •В общем случае должен быть рассмотрен список, содержащий более одного элемента, например:
- •Частный случай: список состоит из одного элемента.
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Пример: включение в список заданного элемента перед предпоследним элементом
- •Формальные параметры процедуры:
- •В общем случае должен быть рассмотрен список,
- •Включение элемента:
- •Частный случай - список, состоящий из двух элементов:
- •Если в списке менее двух элементов, процедура не выполняется:
- •Процедура, решающая указанную задачу:
- •{общий случай}
- •Стек
- •Над стеком определены следующие операции:
- •Очереди
Частный случай - список, состоящий из двух элементов:
Lst |
|
|
|
|
Для такого списка |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Lst^.ukz^.ukz=nil |
|
|
|
|
|
|
|
|
Случай является частным, так как меняется указатель на начало списка:
Elem^.ukz:=Lst;
Lst:=Elem;
Lst
Elem
Lst
32
Если в списке менее двух элементов, процедура не выполняется:
Lst=nil – список пуст
Lst^.ukz=nil- в списке один элемент
Lst
33
Процедура, решающая указанную задачу:
Procedure add_el(var Lst:u;
|
elem:u); |
Var p,q:list; |
|
Begin |
{Procedure del_last} |
if (Lst=nil) OR {операция невыполнима} |
|
(Lst^.ukz=nil) then Exit; if Lst^.ukz^.ukz=nil then
{частный случай}
Begin
Elem^.ukz:=Lst;
Lst:=Elem
End; |
34 |
|
{общий случай}
P:=Lst; Q:=Lst^.ukz;
While Q^.ukz^.ukz<>nil do
Begin
P:=Q;
Q:=Q^.ukz;
End;
Elem^.ukz:=Q;
P^.ukz:=Elem;
End; |
{Procedure del_last} |
35 |
|
|
Стек
Стек – одномерная, динамически изменяющаяся структура данных, предназначенная для того, чтобы добавлять элементы ко множеству и удалять их оттуда. Стек может удлиняться, укорачиваться и на время становиться пустым.
36
Над стеком определены следующие операции:
занесение нового элемента;
выборка и удаление элемента.
Дисциплина обслуживания- LIFO (Last In First Out)
Вершина
стека
37
Очереди
Над очередью определены следующие операции:занесение нового элемента;выборка и удаление элемента.
Дисциплина обслуживания- FIFO (First In First Out)
«Голова» |
|
|
«Хвост» |
|
|
|
|
Выборка и |
Занесение |
|
удаление |
||
|
38
