Динамические структуры данных. Алексеев А.Ю - 14 стр.

UptoLike

Implementation
Const NilLst = 0 ; {nil для списков, в том числе для списка свободной памяти }
type
ord {звено цепи ( списка ): }
Info : El; {- содержимое (элемент списка) }
Next : Link; { - ссылка на следующее звено }
end { Node } ;
MemoryForLists = array [ Index ] of Node;
{рабочий массив для размещения списков }
var Memory : MemoryForLists;
i : Index;
... { На месте ... размещаются блоки процедур и функций }
begin
{ инициализация списка свободной памяти в массиве Memory }
Memory [ MemMaxSize ] . Next := NilLst;
for i := 1 to MemMaxSize do
Memory [ i-1 ] . Next := i ;
end {L1ListV}.
Рис. 1.12. Макет секции Implementation модуля L1ListV
Unit Global;
{Здесь задаются тип элементов Л1–списка и максимальный размер "рабочей" памяти }
Interface
const
M
axSize = { максимальный размер }
0
0; {например } {"рабочей" памяти }
type El = Char; {например}
Implementation
end { Global }.
Рис. 1.13. Модуль Global
1.5. Линейный двунаправленный список
Как уже отмечено в 1.1, Л2–список представляет собой такой линейный
список, по которому можно перемещаться от текущего элемента как в направ-
лении конца списка, так и в направлении его начала. Функциональная специ-
фикация Л2–списка может быть получена расширением приведенной на
рис. 1.6 функциональной спецификации Л1–списка, например, путем задания
трех дополнительных базовых операций (рис. 1.14).
Семантику дополнительных базовых операций определим с помощью
троек Хоара аналогично тому, как это было сделано в 1.2 для Л1–списка.
Пусть по-прежнему w = [ x
1
, x
2
, ..., x
n-1
, x
n
] непустая последовательность эле
14
Implementation
Const NilLst = 0 ; {nil для списков, в том числе для списка свободной памяти }
type
ord            {звено цепи ( списка ):         }
Info : El;     {- содержимое (элемент списка) }
Next : Link; { - ссылка на следующее звено }
end { Node } ;
MemoryForLists = array [ Index ] of Node;
{рабочий массив для размещения списков }
      var Memory : MemoryForLists;
i : Index;
... { На месте ... размещаются блоки процедур и функций }
begin
{ инициализация списка свободной памяти в массиве Memory }
Memory [ MemMaxSize ] . Next := NilLst;
for i := 1 to MemMaxSize do
Memory [ i-1 ] . Next := i ;
end {L1ListV}.

                Рис. 1.12. Макет секции Implementation модуля L1ListV

Unit Global;
  {Здесь задаются тип элементов Л1–списка и максимальный размер "рабочей" памяти }
 Interface
 const
 MaxSize =       { максимальный размер }
00; {например } {"рабочей" памяти      }
 type El = Char; {например}
 Implementation
 end { Global }.

                              Рис. 1.13. Модуль Global


                  1.5. Линейный двунаправленный список

     Как уже отмечено в 1.1, Л2–список представляет собой такой линейный
список, по которому можно перемещаться от текущего элемента как в направ-
лении конца списка, так и в направлении его начала. Функциональная специ-
фикация Л2–списка может быть получена расширением приведенной на
рис. 1.6 функциональной спецификации Л1–списка, например, путем задания
трех дополнительных базовых операций (рис. 1.14).
     Семантику дополнительных базовых операций определим с помощью
троек Хоара аналогично тому, как это было сделано в 1.2 для Л1–списка.
Пусть по-прежнему w = [ x1, x2, ..., xn-1, xn ] – непустая последовательность эле
                                         14