У Вас там что -- очень много подобных друг другу сущностей?
да не сказать что очень уж много. Вот простой практический пример - 23дерево.
http://www.cosc.canterbury.ac.nz/tad.ta … tree23.gif
Кажется всё просто:
Имеем объекты двух типов - с двумя потомками, и с тремя потомками.
Когда нужно вставить новый листик, то узел с двумя потомками превращается в узел с тремя. А если это уже узел с тремя, то он расщепляется на 2 узла с двумя. Вот и всё.
Объекты всего 2х типов, и кажется логичным записать тип в объект, и всё. Но! Сколько хранить данных в объекте? Если потомков 3, до данных 2, а если потомков 2, то всего 1 данное. Если мы будем всё делать как объекты с 3я потомками, мы потеряем немерено памяти! Но если будем хранить как разные узлы, то это приведёт нас к "типам" void*, и зачем нам это "высокоуровневый" С?! Чем он лучше ассемблера, где нет никаких типов данных?
Логично реализовать это на С++, тогда каждый узел будет знать, КАК вставлять листы. Причём никаких проверок типа - не нужно. Мы просто запускаем функцию вставки в узел, а уж узел лучше знает, как ему "вставляться". Проблема типов тоже решена - делаем тип "просто узел", и от него наследуем типы "узел с двумя потомками", и "узел с тремя". Сами узлы могут с лёгкостью удалять себя, что-бы создавать новые, достаточно им передать указатель на то место, к которому они подвешены.
Можно сказать: "зачем тебе эти деревья, когда они УЖЕ реализованы?" Всё просто - они НЕ ТАК реализованы, и если мне нужно хранить структуры из миллионов узлов, то мне тупо не хватает памяти и быстродействия.
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)


