Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Хранение и считывание древовидной структуры данных   Найти похожие ветки 

 
TP   (2005-02-08 12:20) [0]

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

Но вот как лучше сохранить все это в типизированный файл и
потом считать оттуда. Я так понимаю придетя в каждой записи
файла хранить помимо данных еще и информацию что это узел или пункт,
кроме того содержит ли это узел подузел и т.д.
Т.е. идем по файлу натыкаемя на узел - далее идут подузлы и данные,
определить это все можно с помощью индетификатора . Например
узел 1 содержит подузел(или пункт) 1.1 в свою очередь
если это подузел, то  имеет свой ID 1.1.1 и например пункты 1.1.2/1.1.3 и т.д.
Значит запись должна иметь такой ID

TType=record
............
ID:array [1..High(Byte)] of Byte;
...........
end;

Я на верном пути или нет.Как это лучше осуществить ?


 
Юрий   (2005-02-09 19:18) [1]

Путь похож на верный, но я сделал бы иначе... По поводу способов хранения таких структур написано очень много. Попробуй следующее: я рискну предположить, что сия структура описана классически
Type
PTree = ^TTree;
TTree = Record
         Inf : <какой-то тип данных>;
         Links: Array [1..N] of PTree;
        End;

А дальше произведи его балансировку и начни сохранять ветви дерева С ТЕРМИНАЛЬНЫХ ЭЛЕМЕНТОВ по уровням вверх. В результате,последняя запись - корень дерева. Зная в какую сторону был обход при сохранении, начинаешь его восстанавливать, а чтобы не ошибиться, можешь применить свою идею с ID, только хранить ты в ней будешь номер уровня, на котором находитя этот элемент.



Страницы: 1 вся ветка

Текущий архив: 2005.02.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.05 c
11-1082736768
nester
2004-04-23 20:12
2005.02.27
Как определить "удачность" выполнения NewWriteFileStream


3-1107013435
neat
2005-01-29 18:43
2005.02.27
dbExpress. Ошибка в параметре запроса


14-1107745239
Думкин
2005-02-07 06:00
2005.02.27
С Днем рождения! 5 февраля


14-1107823439
ArMellon
2005-02-08 03:43
2005.02.27
Что такое домен в Win Xp


14-1107064619
Чеширский_Кот
2005-01-30 08:56
2005.02.27
Вызываю на дуэль трех мушкетеров с этого форума!