![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
RAN |
|
||||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Вот эта тема навеяла мысль создать контейнер для хранения данных в виде дерева. Вот я и набросал, если так можно сказать, односвязное дерево. Это значит, что движение возможно лишь от корня и от первого элемента, но не в обратных порядках.
Итак, описание 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 |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
RAN, я бы сначала поискал в Сети примерчики, может народ уже давно это реализовал. Но суть моего поста не в этом. А в том, что в STL уже реализовано дерево для "внутреннего потребления", т.е. для нужд других классов STL.
(Раньше здесь был БОЛЬШОЙ кусок кода из STL ![]() Это сообщение отредактировал(а) mr.DUDA - 7.9.2003, 11:37 -------------------- ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
ЗЫ, в STL от Хьюлетт Паккарда файлец называется "Xtree", в StlPort - это пара "_tree.h" и "_tree.c". Сбалансированное двоичное дерево (красный и черный "цвета" и прочее).
ЗЫ(2), это всё не ради выпендрёжа, просто реализацию произвольного дерева можно делать не с нуля, а взять куски STL'овского сорца. Особенно помочь это может в геморе с итераторами и пр. ЗЫ(3), своего варианта пока что не придумал... -------------------- ![]() |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Ну, ладно. Только ты так больше не делай. Тебе надо было просто написать, что это уже реализовано. Что сам ты пока не разобрался в том, как пользоваться, но вот файлы в STL. Я и все кому интересно вглянули бы туда. А так ты опубликовал ни о чём не говорящие выдержки из кода. Я думаю, начинающих программистов ты уже перепугал и они в эту тему не зайдут
![]() |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. Репутация: 5 Всего: 6 |
Вот, нашёл. А можно было самим реализовать ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |