5) Представление в виде двоичного дерева

Можно еще более усовершенствовать метод представления данных в виде рекурсивной структуры, если преобразовать структуру "рс" в двоичное дерево ("дд"). Это достигается путем введения одного дополнительного аргумента. Смысл использования двоичного дерева заключается в том, чтобы хранить базу данных в отсортированном виде.

В приводимом ниже примере база данных отсортирована по атрибуту, описывающему имя служащего.

Теперь в структуре будет шесть аргументов:

дд (Имя, ОтдДолж, Окл, Предыдущ, Последующ)

Переменная «Предыдущ» описывает ветвь дерева, содержащую все целостные информационные элементы, стоящие (в соответствии с алфавитным порядком) перед текущим элементом. Переменная «Последующ» представляет ветвь, охватывающую все целостные информационные элементы, расположенные, согласно алфавиту, после данного элемента. Предположим, что целостный информационный элемент, содержащий все сведения о Нэнси, является самым верхним узлом дерева. Тогда двоичное дерево, отсортированное в алфавитном порядке по именам служащих, примет вид, изображенный на рис. 2. 3. Это можно записать следующим образом:

дд (нэнси, 200,начальник, 71000,

дд (брайен. 100, onepaтop, 20000, end, end),

дд (paльф, 100, мeнeджep, 71500, end, end)

)

Версия процедуры "один_диэ" для представления данных в виде двоичного дерева будет иметь вид:

% игнорировать верхний уровень двоичного дерева; вызвать про-

%цедуру "один_циэ_дд" для получения следующего целостного

% информационного элемента в соответствии со значением переменной

% Предыдущ:

% - +

один_циэ_дд (сл (Имя, Отд, Долж, Окл), дд (_, _, _, _, Предыдущ,

Последующ))

: - один_циэ_дд (сл (Имя. Отд, Долж, Окл), Предыдущ).

% выдать целостный информационный элемент, расположенный на

% верхнем уровне двоичного дерева:

один_циэ_дд (сл (Имя, Отд, Долж, Окл), дд (Имя, Отд, Долж, Окл, _, _)).

% игнорировать верхний уровень двоичного дерева; вызвать про-

% цедуру "один_циэ_дд" для получения следующего целостного

% информационного элемента в соответствии со. значением переменной.

% Последующ:

один_циэ_дд (сл (Имя, Отд, Долж, Окл), дд (_, -, -, -, Предыдущ,

Последующ))

: - один_циэ_дд (сл (Имя, Отд, Долж, Окл), Последующ).

Теперь процедура "один_циэ_дд" определена, можно написать запрос, позволяющий найти всех служащих отдела 100. Вторым аргументом запроса является целиком вся база данных.

|? -один_циэ_дд (сл (Имя, 100,Долж, Окл),

дд (нэнси, 200, начальник, 71000,

дд (брайен, 100, оператор, 20000, end, еnd).

дд (ральф, 100, менеджер, 71500, end)

)

).

Имя = брайен

Долж = оператор

Окл = 20000;

Имя =ральф

Долж = менеджер

Окл = 71500;

нет

Свойства представления в виде двоичного дерева

Одним из интересных свойств представления в виде двоичного дерева является то, что процедура "один_циэ_дд" всегда будет выдавать целостные информационные элементы, образующие дерево, в отсортированном порядке. Это иллюстрирует запрос:

|? -один_циэ_дд (Запись,

дд (нэнси, 200, начальник, 71000,

дд (брайен, 100, onepaтоp, 20000, end, end),

дд (ральф, 100, менеджер, 71500, end, end)

)

).

Запись = сл (брайен, 100, оператор, 20000);

Запись = сл (нэнси, 200, начальник, 71000);

Запись = сл (ральф, 100, менеджер, 71500);

нет

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие