Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите создать иерархию, динамической вложенности [D6, Win2k]


msgipss ©   (2005-03-02 20:17:00) 

Как создать следующую структуру:
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;
Понятно что это работать не будет, но смысл понятен должен быть.
Хочу сделать иерархию любой вложенности, как ни будь можно сделать это не статически ?
Надеюсь, я хоть немного понятно объяснил, заранее благодарен за ответ


msgipss   (2005-03-03 18:38:00) [1]

Большой сенькс 8)


Просто Джо   (2005-03-03 16:15:00) [2]


> как указать в классе 1, класс 2 описанный ниже ?



type
 TClass1 = class;

 TClass2 = class
 private
   FInnerClass: TClass1;
 end;

 TClass1 = class
 // полное объявление класса
 end;


msgipss   (2005-03-03 16:04:00) [3]

Димон   (02.03.05 20:21) [1]
а как использовать объекты,
как указать в классе 1, класс 2 описанный ниже ?


Ермак   (2005-03-02 21:33:00) [4]

В общем-то, она у тебя и так не статическая, так как array of есть указатель на массив динамической длины. Но, естественно, косой это способ. Если дерево органиченной арности (т.е. у каждого узла может быть не более n веток) то при небольшом n сойдет и статический массив указателей на запись). Иначе - динамический массив, но не записей, а указателей на запись.

А лучше всего - гибрид дерева и списка.

TNode = record
data: ...
subnodes: pNode; //список веток нижнего уровня
next: pNode; //Указатель на следующую вершину того же уровня.
end;

[A]
|(subnodes)
[B1]-(next)-[B2]-(next)-[B3]-...
|             |           |

Если важна скорость поиска, то вместо списка вообще используй бинарное дерево.


Димон   (2005-03-02 20:21:00) [5]

Используй классы...
Или ссылки на записи...

т.е.
PRec = ^TRec;
TRec = record
  Children: array of PRec;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо