Текущий архив: 2005.03.20;
Скачать: CL | DM;
Вниз
Помогите создать иерархию, динамической вложенности Найти похожие ветки
← →
msgipss (2005-03-02 20:17) [0]Как создать следующую структуру:
type
rSProp = record
sName:string;
nType:byte;
end;
rMProp = record
aSProp: array of rSProp;
sName: String;
aMProp: array of rMProp;
end;
var aMProp: array of rMProp;
Понятно что это работать не будет, но смысл понятен должен быть.
Хочу сделать иерархию любой вложенности, как ни будь можно сделать это не статически ?
Надеюсь, я хоть немного понятно объяснил, заранее благодарен за ответ
← →
Димон (2005-03-02 20:21) [1]Используй классы...
Или ссылки на записи...
т.е.
PRec = ^TRec;
TRec = record
Children: array of PRec;
end;
← →
Ермак © (2005-03-02 21:33) [2]В общем-то, она у тебя и так не статическая, так как array of есть указатель на массив динамической длины. Но, естественно, косой это способ. Если дерево органиченной арности (т.е. у каждого узла может быть не более n веток) то при небольшом n сойдет и статический массив указателей на запись). Иначе - динамический массив, но не записей, а указателей на запись.
А лучше всего - гибрид дерева и списка.
TNode = record
data: ...
subnodes: pNode; //список веток нижнего уровня
next: pNode; //Указатель на следующую вершину того же уровня.
end;
[A]
|(subnodes)
[B1]-(next)-[B2]-(next)-[B3]-...
| | |
Если важна скорость поиска, то вместо списка вообще используй бинарное дерево.
← →
msgipss (2005-03-03 16:04) [3]Димон (02.03.05 20:21) [1]
а как использовать объекты,
как указать в классе 1, класс 2 описанный ниже ?
← →
Просто Джо © (2005-03-03 16:15) [4]
> как указать в классе 1, класс 2 описанный ниже ?
type
TClass1 = class;
TClass2 = class
private
FInnerClass: TClass1;
end;
TClass1 = class
// полное объявление класса
end;
← →
msgipss (2005-03-03 18:38) [5]Большой сенькс 8)
Страницы: 1 вся ветка
Текущий архив: 2005.03.20;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.033 c