У меня есть некоторые данные (не то, чтобы эти данные действительно существовали до тех пор, пока я не решил это ...) Мне нужно иметь возможность манипулировать внутри моей программы. Однако я не могу найти подходящую структуру для хранения этого.
Данные представляют собой набор путей и узлов. Существует один вход (который в некоторых случаях может отсутствовать), а затем несколько путей между узлами, заканчивающимися выходами (у конца может не быть выхода, но выход всегда находится в конце). Каждый вход, узел и выход имеет свою позицию, и в целом данные можно манипулировать графически, поэтому любую структуру, которую я использую, нужно легко изменять во время выполнения потенциально непредсказуемыми способами (такими как изменение ввода на вывод и затем сделать еще один вывод).
Я подумал об использовании древовидной структуры, где у каждого элемента есть родитель (кроме корня) и несколько дочерних элементов, например:
Input
|
node---
| | |
| | Output
| |
| Node---Output
| |---Output
|
Node----Node
| |
Node Output
Однако я вижу ряд проблем с этим, таких как отсутствие ввода или его удаление / изменение / и т.д. ...
Это наглядный пример. > Является входным узлом O и выводит [].
http://unisonmodules.co.uk/wjnewbery/data.png
@ Каждый, кто предлагает использовать древовидную структуру, как я уже упоминал
Если дерево действительно подходит, как мне преодолеть проблемы, когда у данного набора данных нет даже ввода / корня, как, например, ниже. Что происходит потом? Нужно ли полностью перестраивать дерево, если входной узел / точка / что-либо меняется (через удаление, затем добавление)? Как мне это сделать?
http://unisonmodules.co.uk/wjnewbery/data2.png
Я посмотрю на графики.