| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Контейнер для хранения дерева |
| Автор: RAN 7.9.2003, 05:05 | ||||
| http://forum.vingrad.ru/index.php?act=ST&f=1&t=12249 тема навеяла мысль создать контейнер для хранения данных в виде дерева. Вот я и набросал, если так можно сказать, односвязное дерево. Это значит, что движение возможно лишь от корня и от первого элемента, но не в обратных порядках. Итак, описание tree<T> Tree; - создаёт контейнер дерева, который хранит элементы типа T tree<T>::iterator i; - объявляем итератор (на самом деле над ним надо работать, он не функционирует пока как итератор) Tree.addChild(T x); - добаляет новый элемент в корень дерева Tree[0].addChild(T x); - добаляет новое детё первому элементу в корне дерева Tree[0].addNext(T x); - раздвинуть элементы и впихнуть после Tree[0] новый элемент i->push_back(T x); - Добавить элемент в конец, на том же уровне, что и итератор i. Не совсем традиционно, будем думать. Новигация i->getNext(); - Если i - это итератор, то оператор вернёт следующий элемент, того же уровня, или ноль если последний. Оператор ++ пока не работает i->getChild(); - Ну, а это детё, или ноль, если детей нет Только сейчас подумал, нет методов удаления элементов, но это не беда - сделаем потом, если интерес к теме будет. Вот файл определения контейнера: tree.h
Вот пример использования
Вот. Надо класс итератора ещё написать, удаление реализовать. Потом можно будет контейнер двусвязный сделать и т.д. |
| Автор: mr.DUDA 7.9.2003, 10:23 |
| RAN, я бы сначала поискал в Сети примерчики, может народ уже давно это реализовал. Но суть моего поста не в этом. А в том, что в STL уже реализовано дерево для "внутреннего потребления", т.е. для нужд других классов STL. (Раньше здесь был БОЛЬШОЙ кусок кода из STL |
| Автор: mr.DUDA 7.9.2003, 10:27 |
| ЗЫ, в STL от Хьюлетт Паккарда файлец называется "Xtree", в StlPort - это пара "_tree.h" и "_tree.c". Сбалансированное двоичное дерево (красный и черный "цвета" и прочее). ЗЫ(2), это всё не ради выпендрёжа, просто реализацию произвольного дерева можно делать не с нуля, а взять куски STL'овского сорца. Особенно помочь это может в геморе с итераторами и пр. ЗЫ(3), своего варианта пока что не придумал... |
| Автор: RAN 7.9.2003, 10:48 |
| Ну, ладно. Только ты так больше не делай. Тебе надо было просто написать, что это уже реализовано. Что сам ты пока не разобрался в том, как пользоваться, но вот файлы в STL. Я и все кому интересно вглянули бы туда. А так ты опубликовал ни о чём не говорящие выдержки из кода. Я думаю, начинающих программистов ты уже перепугал и они в эту тему не зайдут |
| Автор: RAN 7.9.2003, 11:14 | ||
http://cpp.hotmail.ru/prjct03_1.html, нашёл. А можно было самим реализовать |