Здравствуйте, Багер, Вы писали:
Б>Здравствуйте, lurker, Вы писали:
L>>исходник реализации поиска с вставкой и удаления на б-деревьях
Б>собственно и есть наиполнейшая реализация шесть-дерева 8))
L>>Язык значения не имеет.
Б>язык русский %))
L>>Комментарии приветствуются.
Б>практически одни коментарии
Б>Дерево
Б>(
Б> Дерево адресЭтотЭлемент;
Б> Дерево адресБольшее;
Б> Дерево адресМеньшее;
Б> Знач;
Б>)адресКореньДерева;
Б>адресКореньДерева.Меньшее= адресНУЛЬ;
Б>адресКореньДерева.Большее= адресНУЛЬ;
Б>адресКореньДерева.Знач= 0;
Б>адресКореньДерева.адресЭтотЭлемент= адресКореньДерева;
Б>Дерево адресЭлементДерева;
Б>Дерево адресРезультат;
Б>Дерево адресПапа;
Б>ИскомоеЗнач;
Б>Функция Дерево::Искать()
Б> Если ИскомоеЗнач = адресЭтотЭлемент.Знач Тогда
Б> адресРезультат= адресЭтотЭлемент;
Б> Возврат адресНУЛЬ;
Б> Иначе
Б> адресПапа= адресЭтотЭлемент;
Б> Если ИскомоеЗнач< адресЭтотЭлемент.Знач Тогда
Б> Возврат адресЭтотЭлемент.адресМеньшее;
Б> Иначе
Б> Возврат адресЭтотЭлемент.адресБольшее;
Б> КонецЕсли
Б> КонецЕсли
Б>КонецФункции
Б>Процедура Дерево::НачатьПоиск(Дерево адресЭлементДерева)
Б> адресРезультат= адресНУЛЬ;
Б> адресПапа= адресЭтотЭлемент;
Б> Если адресЭлементДерева = адресНУЛЬ Тогда
Б> Возврат;
Б> КонецЕсли
Б> Пока ( (адресЭлементДерева:= адресЭлементДерева.Искать()) НЕ= адресНУЛЬ ) Цикл
Б> КонецЦикла
Б>КонецПроцедуры
Б>Процедура КУдалению()
Б> Если адресПапа.Большее = адресРезультат Тогда
Б> Если (адресПапа.адресБольшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресБольшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> Иначе
Б> Если (адресПапа.адресМеньшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресМеньшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> КонецЕсли
Б> Если адресРезультат.адресБольшее = адресНУЛЬ Тогда
Б> Возврат;
Б> КонецЕсли
Б> Дерево адресВременнаяВетка= адресРезультат;
Б> ИскомоеЗнач= адресРезультат.Знач;
Б> адресРезультат.НачатьПоиск(адресРезультат.адресМеньшее);
Б> адресПапа.адресБольшее= адресВременнаяВетка.Большее;
Б> адресРезультат= адресВременнаяВетка;
Б>КонецПроцедуры
Б>Процедура Вставить()
Б> адресКореньДерева.Знач= ИскомоеЗнач;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Б> Если адресРезультат НЕ= адресНУЛЬ Тогда
Б> Сообщить( "Элемент уже есть" );
Б> Возврат;
Б> КонецЕсли;
Б> Если ИскомоеЗнач< адресПапа.Знач Тогда
Б> адресРезультат= (адресПапа.адресМеньшее= ВыделитьПамять Дерево);
Б> Иначе
Б> адресРезультат= (адресПапа.адресБольшее= ВыделитьПамять Дерево);
Б> КонецЕсли
Б> адресРезультат.Меньшее= адресНУЛЬ;
Б> адресРезультат.Большее= адресНУЛЬ;
Б> адресРезультат.Знач= ИскомоеЗнач;
Б> адресРезультат.адресЭтотЭлемент= адресРезультат;
Б>КонецПроцедуры
Б>функция НайтиИПерепрятать()
Б> ИскомоеЗнач= ?;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Б> Если адресРезультат = адресНуль Тогда
Б> Сообщить( "Нет элемента" );
Б> Иначе
Б> Сообщить( "Адрес элемента: " + строка( адресРезультат ) );
Б> КУдалению();
Б> адресРезультат.адресБольшее= адресНУЛЬ;
Б> адресРезультат.адресМеньшее= адресНУЛЬ;
Б> УдалитьПамять адресРезультат;
Б> Вставить();
Б> КонецЕсли
Б>КонецФункции
Конечно прикольно, а можно теперь компилятор под это дело?