Re[4]: Реализация дерева средствами с++11
От: _hum_ Беларусь  
Дата: 16.04.16 13:14
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Здравствуйте, _hum_, Вы писали:


SVZ>>>Предлагаю "ход конём". Заменить указатели на индексы в массиве.


__>>ну, тогда ж придется писать аналог менеждера кучи (чтоб искал свободное место, куда можно вставлять новые элементы, чтобы помечал удаленные как свободные места и т.п.). но еще чуть-чуть, и я психану и все же наверное так и сделаю, потому что тратить столько времени на реализацию обычного дерева — это уж слишком (а я уже третий день с этим вожусь)


SVZ>Ох уж эта молодёжь...


SVZ>Вот получение узла из "менеджера кучи":


  code
SVZ>
SVZ>// ==========================================================================
SVZ>// Создать узел
SVZ>dom::NODE dom::Document::makeNode(LPCTSTR name)
SVZ>{
SVZ>    dom::NODE nodeN = m_NodeFreeList;
SVZ>    if ( nodeN < 0 )
SVZ>    {
SVZ>        nodeN = static_cast<dom::NODE>(m_InfoNode.size());
SVZ>        m_InfoNode.push_back( NodeInfo() );
SVZ>    }
SVZ>    else
SVZ>    {
SVZ>        m_NodeFreeList = m_InfoNode[nodeN].next;
SVZ>        m_InfoNode[nodeN] = NodeInfo();
SVZ>    }

SVZ>    NAMEREF nref = makeNodeName(name);
SVZ>    m_InfoNode[nodeN].name = nref;

SVZ>    return nodeN;
SVZ>}
SVZ>

SVZ>Удаленные узлы помещаются в односвязный список, голова которого хранится в m_NodeFreeList.
SVZ>Хранить можно и плоский список, и целые поддеревья (только в makeNode придется этот факт учитывать), в общем пространство для маневра обширное.

SVZ>Свой код не привожу, потому что у меня там хитрое владение именами узлов — не думаю, что тебе это пригодится.


SVZ>По сложности — задачка на пару часов для студента 2 курса.


я уже все это писал раньше (я не молодежь), потому-то мне и лень было заново этим заниматься думал, с новым стандартом все это донельзя упростится — фигушки.
(и там же нюансы полезут с тем, что делать, если у сохраняемого типа нет конструктора по умолчанию — придется этими всеми списками инициализации и прочей мудатеньню заниматься.к тому же придется решать вопросы, которые больше всего не люблю — организационные — какое хранилище выбрать — статическое или динамически расширяемое, делать общий случай с темплейтами или конкретный, какие названия давать и т.п.). в общем, пока оставалась надежда выкрутиться малой кровью, но кажется, она на исходе
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.