Здравствуйте, Зверёк Харьковский, Вы писали: ЗХ>Нужна она для представления иерархически организоанной информации (файлы на диске, XML, да что угодно!)
Вот теперь правильная формулировка. ЗХ>Внимание, вопрос: ЗХ>КТО КАКИЕ КЛАССЫ ИСПОЛЬЗУЕТ, когда сталкиваеться с такой структурой. Теоретически, такое бывает надо довольно часто.
Я лично предполагаю, что для каждой задачи делается своя структура данных, это совсем не сложно.
и солнце б утром не вставало, когда бы не было меня
ЗХ>Струтура данных "дерево" нужна бывает довольно часто. ЗХ>Внимание, вопрос: кто какую реализацию использует? такое ощущение, что все уже нашли свой идеал... (Впечатление такое оттого, что в "Исходниках" на деревья реагируют крайне слабенько)
> Начнем с начала. > > Существует структура данных, которая определяется таким образом: > у каждого элемента 0..N потомков. Один корень. > Если я еще не все перезабыл, то это, стало быть, ациклический направленный граф с одной корневой вершиной. > Хорошо. > Нужна она для представления иерархически организоанной информации (файлы на диске, XML, да что угодно!) > Внимание, вопрос: > КТО КАКИЕ КЛАССЫ ИСПОЛЬЗУЕТ, когда сталкиваеться с такой структурой. Теоретически, такое бывает надо довольно часто.
извини, но не вникал в вопрос, но чтобы не изобретать самокат, вот несколько ссылок уже на готовые деревья: www.damtp.cam.ac.uk/user/kp229/tree/ www.codeproject.com/vcpp/stl/wrk.asp www.lsp.ups-tlse.fr/Chafai/libtree.html www.research.att.com/sw/tools/graphviz/
www-h.eng.cam.ac.uk/help/tpl/talks/C++graphs.html www.cs.queensu.ca/home/dalamb/courses/235/slides/thread.html
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>в ней. никаких свер-возможностей не надо. ЗХ>просто, есть классы, хранящиеся деревом (каталоги-подкаталоги, и все такое) ЗХ>нужно
ЗХ>
ЗХ>1. возможность обойти дерево (итератор) ЗХ>2. возможность обойти только данную ветку (итератор') ЗХ>3. возможность добавить-удалить потомков к ветке. ЗХ>
ЗХ>неужели никому такое не надо?
Дык несложно...
(Начал писать, и понял, что не столько несложно, сколько чертовски рутинно, если подходить грамотно.
Вот что я нарожал в приступе программизма — посмотрите, может что-то полезное найдёте может, не зря я это делал )
ЗХ>Струтура данных "дерево" нужна бывает довольно часто. ЗХ>Внимание, вопрос: кто какую реализацию использует? такое ощущение, что все уже нашли свой идеал... (Впечатление такое оттого, что в "Исходниках" на деревья реагируют крайне слабенько)
Загляни в boost, там есть Boost Graph Library.
Переформулирую вопрос еще раз:
Я не столько просил подарить мне исходник дерева, сколько пытался понять:
насколько часто у людей возникает такой вопрос?
есть ли одно решение, которое удовлетворяет всех?
(почему, скажем, в бусте такого нет? неужто настолько никому не надо? только не надо про буст::граф, использовать его как простое дерево не слишком удобно)
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Я не столько просил подарить мне исходник дерева, сколько пытался понять: ЗХ>насколько часто у людей возникает такой вопрос?
Я думал, думал... и не придумал, для чего мне может понадобится обобщённый вариант дерева.
В том случае, когда мне нужна была древовидная структура, я быстро сооружал её из подручных средств.
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>>Я не столько просил подарить мне исходник дерева, сколько пытался понять: ЗХ>>насколько часто у людей возникает такой вопрос?
AD>Я думал, думал... и не придумал, для чего мне может понадобится обобщённый вариант дерева. AD>В том случае, когда мне нужна была древовидная структура, я быстро сооружал её из подручных средств.
я хитрее
посмотри тот вариант, который в моем предыдущем сообщении.
там хранит детей и за их добавление-удаление-сортировку отвечает клиент, а дерево — это тонкая оберька над ним — предоставляет только итераторы для обхода.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, Зверёк, Вы писали:
ЗХ>> Струтура данных "дерево" нужна бывает довольно часто. ЗХ>> Внимание, вопрос: кто какую реализацию использует?
ПК>Реализация большая, а интерфейс более-менее такой:
а реализацию? жалько?
Здравствуйте, Зверёк, Вы писали:
ПК>> Реализация большая, а интерфейс более-менее такой:
ЗХ> а реализацию? жалько?
Не жалко а муторно... Если после всех ранее вываленных в этом топике
деревьев все еще хочется чего-нибудь другого, можно, конечно, и попробовать
изолировать от остальных кусков библиотеки. Оно, действительно, надо?
В смысле, если кто-нибудь будет пользоваться, можно и выложить. Но, чё-то
гложут меня сомнения, что при наличии кучи аналогичных классов, кому-то нужен
еще один
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Однако, в конс-паре нет указателя на этаж выше. Поэтому итерируемое дерево на лиспе будет сделать сложно.
Впрочем, нет ничего невозможного. Итератор сам может содержать список — путь до текущего узла. Инкремент сводится к следующим действиям:
* если есть дети — добавить в путь индекс первого ребёнка
* если нет детей, но есть следующий сосед — заменить в пути последний индекс следующим
* пока нет больше соседей и путь не пуст — отбрасывать последний индекс
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Переформулирую вопрос еще раз: ЗХ>Я не столько просил подарить мне исходник дерева, сколько пытался понять: ЗХ>насколько часто у людей возникает такой вопрос?
У нас (олимпиадники-программисты) часто.
ЗХ>есть ли одно решение, которое удовлетворяет всех?
Ага. Наш кодер помнит (уже на рефлексах) AVL и декартовы деревья, просто деревья реализуются
им по мере надобности одной рукой с завязанными глазами не приходя в сознаник.
ЗХ>(почему, скажем, в бусте такого нет? неужто настолько никому не надо? только не надо про буст::граф, использовать его как простое дерево не слишком удобно)
Я когда-то кидал в "Исходники" сырой вариант дерева. Его попинали немного и привели в пристойный вид.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Струтура данных "дерево" нужна бывает довольно часто.
Я бы еще добавил: и разная.
Ну т.е. в модели файловой системы узлы уникально именованные.
И операции поиска-обхода сугубо специфические.
То же самое и с XML — имплементация должна быть своя.
Про HTML я вообще молчу. Там лес, лесополоса и посевы мака квадратно-гнездовым способом.
Дерево это как правило некий DOM, а на этом DOMе еще много чего висит.
Например в HTML итераторы есть такие char_visitor, word_visitor, paragraph_vistor, floaters_visitor, text_line_visitor и еще до чертиков всякой визиторской лабуды. А координаты? Вообще полный привет.
Т.е. дерево как конструкция (parent)(children)* это только одна из проекций.
Мне кстати пришлось от iteratora в чистом виде уходить.
Оперции типа move_next (++) move_prev(--) пришлось делегировать самим объектам DOM.
Сам термин "позиция итератора" в лесу, в дереве и на маковом поле оченно разные.