Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.042 c
1-1108545499
Начинающий 2
2005-02-16 12:18
2005.02.27
Импорт формы в форму из DLL.


14-1108031038
Cosinus
2005-02-10 13:23
2005.02.27
Ха! Как сделать ScreenShot экрана? Не смейтесь, прочитайте вопрос


14-1107775727
Vasya.ru
2005-02-07 14:28
2005.02.27
А какие вообще разрешения экранов бывают?


3-1107233168
RDen
2005-02-01 07:46
2005.02.27
A user transaction is already in progress.


3-1106770851
MakedoneZ
2005-01-26 23:20
2005.02.27
На счет хорошего стиля и TDBGrid.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский