Установленная структура данных / шаблон?Список с динамически связанными детьми - PullRequest
1 голос
/ 17 августа 2011

Мне нужно решение, в котором у меня есть один «главный» список / массив, в котором есть несколько последовательно упорядоченных связанных дочерних элементов, каждый из которых представляет подсегмент родительского списка.Он напоминает шаблон «развернутый связанный список» , но здесь размер списка сегментов должен быть динамическим.

Здесь я попытаюсь объяснить далее.Я хотел бы выяснить, существует ли установленный термин для такого рода структуры данных / шаблона (таким же образом, как «график», «двоичное дерево» и т. Д.), Который мог бы помочь мне при дальнейшем исследовании этого вопроса, пытаясь найтилучшая реализация.

Допустим, у нас есть список «master» размером десять элементов, 0-9, и с тремя дочерними элементами a, b и c, представляющими подсегменты мастера следующим образом:

"master"    -------------------
 0-9        0 1 2 3 4 5 6 7 8 9
            ===== ========= ===
"children"  a     b         c
            0-2   3-7       8-9

В идеале решение должно позволять мастеру

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

Любые блоги, статьи, фрагменты кода и т. Д., Которые занимаются чем-то вроде этого, будут очень полезны!(Мои решения будут созданы в php и as3, но язык здесь не имеет значения).

Спасибо!

1 Ответ

0 голосов
/ 17 августа 2011

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

 1 -> 2 -> 3 -> 4 -> 5
 \ /     /      \  /
  a-----          b
...