Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Бинарное Дерево и лин. список


Автор: ne0n 3.6.2008, 20:05
вообщем есть следуюие структуры:
Код


//лин. список
struct Fine
{
char time[N];
char type[M];
float price;
Fine *next
}

//бин. дерево

struct Node
{char number[A];
Fine *beg;
Node *left;
Node *right
}


как можно догадаться, это что-то вдухе небольшой базы данных, основанной на бин.дереве.
в качестве описывающих полей используеться лин.список.

Проблема заключаеться в том что я не как не могу сообразить, как это все добро сохранить\востоновить из файла. допустим есть указатель на root(корень). Какие есть идеи по этому вопросу?

Автор: jonie 3.6.2008, 23:07
Цитата

как можно догадаться, это что-то вдухе небольшой базы данных, основанной на бин.дереве.
нострадамусу и неснилось...
Цитата

Проблема заключаеться в том что я не как не могу сообразить, как это все добро сохранить\востоновить из файла. допустим есть указатель на root(корень)
полюбому для каждого  листа дерева (у тебя это список) тебе надо сначала сохранять количество данных в списке. далее сохраняешь сами данные списка (все кроме указателя).
теперь подробнее о том как сохранить структууру (дерево).
листы мы уже рассмотрели как сохранять.
далее можно сделать например так: сохранять байт, указывающий есть ли предок справа, слева, или они есть вместе.
и для каждого листа(предка) процедура сохранения повторяется рекурсивно.

Автор: rrrFer 4.6.2008, 04:12
ne0n, 
Цитата

как это все добро сохранить\востоновить из файла

да как пидумаешь так и сохранять. Например, можно так:
обходишь дерево, при этом записываешь в файл поля структуры, разделяя их, например символом "|", а после этого символа пишешь сколько у узла было ненулевых ссылок на другие узлы. Можно и не разделять символом "|" - просто для наглядности написал. А также можно(также для наглядности) запись в файл сделать за 2 обхода, сначала записать в файл содержимое узлов, а потом(отдельно) записать количество ненулевых ссылок(по порядку их определять к какому узлу какая относится.
Можно еще записать сначала самую левую ветвь дерева, в первой строчке, а в последующих строчках писать правые ветви, начиная с листа(самого удаленного от вершины дерева узла) левой ветви, т.е. для струтуры, в которой только одно поле: struct s{char ss[15];}
будет примерно так(если полей больше принцип тотже):
мама мыла раму NULL
NULL
мама NULL
NULL
мыла мама NULL
NULL
мама NULL
NULL
для такого дерева
                                          раму
                   мыла                                         мыла
         мама             мама                 мама                    мама
NULL        NULL NULL   NULL        NULL NULL          NULL NULL

Автор: jonie 4.6.2008, 05:49
текстовые файлы обладают не самымми лучшими скоростными характеристиками имхо.

Автор: ne0n 4.6.2008, 21:52
всем спасибо, но вопрос уже решен smile , а экзамен удачно завален  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)