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

]
злые вы

... << RSDN@Home 1.1.4 beta 3 rev. 241>> ... <<Winamp is playing "Raketobil — Vremea Dojdey">>
Здравствуйте, Багер, Вы писали:
Б>Здравствуйте, lurker, Вы писали:
L>>исходник реализации поиска с вставкой и удаления на б-деревьях
Б>собственно и есть наиполнейшая реализация шесть-дерева 8))
L>>Язык значения не имеет.
Б>язык русский %))
L>>Комментарии приветствуются.
Б>практически одни коментарии
Б>Дерево
Б>(
Б> Дерево адресЭтотЭлемент;
Б> Дерево адресБольшее;
Б> Дерево адресМеньшее;
Б> Знач;
Б>)адресКореньДерева;
Б>адресКореньДерева.Меньшее= адресНУЛЬ;
Б>адресКореньДерева.Большее= адресНУЛЬ;
Б>адресКореньДерева.Знач= 0;
Б>адресКореньДерева.адресЭтотЭлемент= адресКореньДерева;
Б>Дерево адресЭлементДерева;
Б>Дерево адресРезультат;
Б>Дерево адресПапа;
Б>ИскомоеЗнач;
Б>Функция Дерево::Искать()
Б> Если ИскомоеЗнач = адресЭтотЭлемент.Знач Тогда
Б> адресРезультат= адресЭтотЭлемент;
Б> Возврат адресНУЛЬ;
Б> Иначе
Б> адресПапа= адресЭтотЭлемент;
Б> Если ИскомоеЗнач< адресЭтотЭлемент.Знач Тогда
Б> Возврат адресЭтотЭлемент.адресМеньшее;
Б> Иначе
Б> Возврат адресЭтотЭлемент.адресБольшее;
Б> КонецЕсли
Б> КонецЕсли
Б>КонецФункции
Б>Процедура Дерево::НачатьПоиск(Дерево адресЭлементДерева)
Б> адресРезультат= адресНУЛЬ;
Б> адресПапа= адресЭтотЭлемент;
Б> Если адресЭлементДерева = адресНУЛЬ Тогда
Б> Возврат;
Б> КонецЕсли
Б> Пока ( (адресЭлементДерева:= адресЭлементДерева.Искать()) НЕ= адресНУЛЬ ) Цикл
Б> КонецЦикла
Б>КонецПроцедуры
Б>Процедура КУдалению()
Б> Если адресПапа.Большее = адресРезультат Тогда
Б> Если (адресПапа.адресБольшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресБольшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> Иначе
Б> Если (адресПапа.адресМеньшее:= адресРезультат.адресМеньшее) = адресНУЛЬ Тогда
Б> адресПапа.адресМеньшее= адресРезультат.адресБольшее;
Б> Возврат;
Б> КонецЕсли
Б> КонецЕсли
Б> Если адресРезультат.адресБольшее = адресНУЛЬ Тогда
Б> Возврат;
Б> КонецЕсли
Б> Дерево адресВременнаяВетка= адресРезультат;
Б> ИскомоеЗнач= адресРезультат.Знач;
Б> адресРезультат.НачатьПоиск(адресРезультат.адресМеньшее);
Б> адресПапа.адресБольшее= адресВременнаяВетка.Большее;
Б> адресРезультат= адресВременнаяВетка;
Б>КонецПроцедуры
Б>Процедура Вставить()
Б> адресКореньДерева.Знач= ИскомоеЗнач;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Б> Если адресРезультат НЕ= адресНУЛЬ Тогда
Б> Сообщить( "Элемент уже есть" );
Б> Возврат;
Б> КонецЕсли;
Б> Если ИскомоеЗнач< адресПапа.Знач Тогда
Б> адресРезультат= (адресПапа.адресМеньшее= ВыделитьПамять Дерево);
Б> Иначе
Б> адресРезультат= (адресПапа.адресБольшее= ВыделитьПамять Дерево);
Б> КонецЕсли
Б> адресРезультат.Меньшее= адресНУЛЬ;
Б> адресРезультат.Большее= адресНУЛЬ;
Б> адресРезультат.Знач= ИскомоеЗнач;
Б> адресРезультат.адресЭтотЭлемент= адресРезультат;
Б>КонецПроцедуры
Б>функция НайтиИПерепрятать()
Б> ИскомоеЗнач= ?;
Б> адресКореньДерева.НачатьПоиск(адресКореньДерева.адресБольшее);
Б> Если адресРезультат = адресНуль Тогда
Б> Сообщить( "Нет элемента" );
Б> Иначе
Б> Сообщить( "Адрес элемента: " + строка( адресРезультат ) );
Б> КУдалению();
Б> адресРезультат.адресБольшее= адресНУЛЬ;
Б> адресРезультат.адресМеньшее= адресНУЛЬ;
Б> УдалитьПамять адресРезультат;
Б> Вставить();
Б> КонецЕсли
Б>КонецФункции
Конечно прикольно, а можно теперь компилятор под это дело?
Здравствуйте, lurker, Вы писали:
L>>>исходник реализации поиска с вставкой и удаления на б-деревьях
Б>>собственно и есть наиполнейшая реализация шесть-дерева 8))
L>>>Язык значения не имеет.
Б>>язык русский %))
L>>>Комментарии приветствуются.
Б>>практически одни коментарии
L>Конечно прикольно, а можно теперь компилятор под это дело?
Дык, зачем же слова из песни выкидывать?
Язык значения не имеет.
А если по теме, поищи
здесь
Здравствуйте, FreshMeat, Вы писали:
FM>А если по теме, поищи здесь
Искал. Есть конечно, но запутанно и непонятно
Здравствуйте, lurker, Вы писали:
L>Здравствуйте, FreshMeat, Вы писали:
FM>>А если по теме, поищи здесь
L>Искал. Есть конечно, но запутанно и непонятно
Мне кажется, что сама суть идеи шести-деревьев более чем тривиальна (не касаясь их балансировки). По той простой причине, что компьютер имеет всего лишь двоичную систему счисления и, естественно, только понимая её, можно приступать к программированию. А программирование — это использование команд и памяти. Если та или иная команда либо есть либо её нет, то память — это ресурс который есть по-любому. И это русерс имеет адреса, чётко указывающие на местоположение первого байта, или, по-простому, разделяющие всю память на ячейки. В эти ячейки можно записать данные, можно из них прочитать данные, а можно организовать некую структуру, упорядочивающую эти ячейки. Но если создание структур (не самых совершенных) — это развитость логики (школьный курс математики, деградированный до трёх операций), то работа с ячейками памяти по адресам — это 30% отчисленных студентов, решившихся изучать программирование.
Такие дела.
Задачка:
Построить схему при которой, используя только ответы "да" и "нет", возможно будет любому человеку ответить на вопросы:
1. Вы курите?
2. Вы бросили курить?