Составители:
Рубрика:
Реализация Л2–списка на базе вектора также могла бы быть произведена с
помощью добавления в каждое звено цепи (элемент массива типа Memory-
ForLists ) поля Prev ссылки на предшествующее звено. Однако с целью эко-
номии памяти может быть рекомендована замена пары полей Next и Prev од-
ним полем Diff, предназначенным для хранения разности ссылок на
последующее и предшествующее звенья. Макет модуля L2ListV, содержащий
описание соответствующих типов данных, приведен на рис.1.15. Описанный в
модуле тип данных L2_listV соответствует типу данных L_list расширенной
функциональной спецификации. Для краткости в макет модуля не включены
заголовки и блоки процедур и функций.
Unit L2ListV; { Реализация ограниченного L2-списка на Турбо-Паскале }
Interface
Uses Global; { модуль, в котором описан тип элементов списка El }
{Ссылочное представление на базе вектора }
{const MemMaxSize = максимальный размер "рабочей" памяти, описан в модуле
Global}
type Index = 0..MemMaxSize;
Link = Index; { ссылка на звено цепи }
e
cord {формуляр ("представитель") списка }
Head , Cur, PredCur : Link ;
end { RepList };
L2_listV = RepList; { Л2–список = формуляр списка }
... { Здесь на месте ... размещаются заголовки процедур и функций }
Implementation
const NilLst = 0; { nil для списков, в том числе для списка свободной памяти
}
type DiffLink = - MemMaxSize..MemMaxSize;
r
ecord {звено цепи ( списка ) : }
Info : El; { - содержимое (элемент списка) }
Diff : DiffLink; { - разность ссылок }
end { Node } ;
MemoryForLists = array [ Index ] of Node;
{ "рабочий" массив для размещения списков }
var Memory : MemoryForLists; i : Index;
... {Здесь на месте “...” размещаются блоки процедур и функций }
begin
{ инициализация списка свободной памяти в массиве Memory }
Memory [ 0 ] . Diff := 1;
for i := 1 to ( MemMaxSize – 1 ) do Memory [ i ] . Diff := 2 ;
Memory [ MemMaxSize ] . Diff := NilLst - ( MemMaxSize - 1 );
end { L2ListV }.
Рис. 1.15. Макет модуля L2ListV
16
Реализация Л2–списка на базе вектора также могла бы быть произведена с помощью добавления в каждое звено цепи (элемент массива типа Memory- ForLists ) поля Prev ссылки на предшествующее звено. Однако с целью эко- номии памяти может быть рекомендована замена пары полей Next и Prev од- ним полем Diff, предназначенным для хранения разности ссылок на последующее и предшествующее звенья. Макет модуля L2ListV, содержащий описание соответствующих типов данных, приведен на рис.1.15. Описанный в модуле тип данных L2_listV соответствует типу данных L_list расширенной функциональной спецификации. Для краткости в макет модуля не включены заголовки и блоки процедур и функций. Unit L2ListV; { Реализация ограниченного L2-списка на Турбо-Паскале } Interface Uses Global; { модуль, в котором описан тип элементов списка El } {Ссылочное представление на базе вектора } {const MemMaxSize = максимальный размер "рабочей" памяти, описан в модуле Global} type Index = 0..MemMaxSize; Link = Index; { ссылка на звено цепи } ecord {формуляр ("представитель") списка } Head , Cur, PredCur : Link ; end { RepList }; L2_listV = RepList; { Л2–список = формуляр списка } ... { Здесь на месте ... размещаются заголовки процедур и функций } Implementation const NilLst = 0; { nil для списков, в том числе для списка свободной памяти } type DiffLink = - MemMaxSize..MemMaxSize; record {звено цепи ( списка ) : } Info : El; { - содержимое (элемент списка) } Diff : DiffLink; { - разность ссылок } end { Node } ; MemoryForLists = array [ Index ] of Node; { "рабочий" массив для размещения списков } var Memory : MemoryForLists; i : Index; ... {Здесь на месте “...” размещаются блоки процедур и функций } begin { инициализация списка свободной памяти в массиве Memory } Memory [ 0 ] . Diff := 1; for i := 1 to ( MemMaxSize – 1 ) do Memory [ i ] . Diff := 2 ; Memory [ MemMaxSize ] . Diff := NilLst - ( MemMaxSize - 1 ); end { L2ListV }. Рис. 1.15. Макет модуля L2ListV 16
Страницы
- « первая
- ‹ предыдущая
- …
- 14
- 15
- 16
- 17
- 18
- …
- следующая ›
- последняя »