Информатика и технология программирования


         

Затем рекурсивно вызывает самое себя


Затем рекурсивно вызывает самое себя для размещения правого и левого поддерева. Полученные после размещения файловые указатели запоминает в текущей вершине, после чего "обновляет" ее в файле:





//------------------------------------------------------bk59-04.cpp

//------Вариант функции записи вершины дерева в файл

long PutTree_(ftree *p, FILE *fd)
{
long cpos; // Адрес в файле текущей

if (p==NULL) return(FNULL); // вершины дерева

fseek(fd, 0L, SEEK_END);
cpos = ftell(fd);
fwrite((void*)p, TSZ, 1, fd); // Записать в файл текущую вершину

p-&#62fright = PutTree(p-&#62right,fd);
p-&#62fleft = PutTree(p-&#62left,fd);
fseek(fd, cpos, SEEK_SET); // Обновить текущую вершину

fwrite((void*)p, TSZ, 1, fd);
return cpos;
}

Последовательность действий по чтению динамической структуры данных более простая: по имеющемуся адресу из файла читается переменная, из которой берутся значения файловых указателей на другие переменные и процесс повторяется. Структура данных в памяти формируется, как правило, с использованием динамических переменных. В качестве примера рассмотрим загрузку дерева из файла, сформированного любым из двух указанных способов:



//------------------------------------------------------bk59-05.cpp

//----- Функция возвращает указатель на динамическую

// переменную - вершину дерева, считывая ее и связанное

// с ней поддерево из файла

ftree *GetTree(long pos, FILE *fd)
{
struct ftree *p;
if (pos == FNULL) return NULL;
if ((p = new ftreeTSZ) ==NULL) return NULL;
fseek(fd,pos,SEEK_SET);
fread((void *)p, TSZ, 1, fd);
p -&#62left = GetTree(p -&#62fleft,fd);
p -&#62right = GetTree(p-&#62fright,fd);
return p;
}
//----- Функция открывает файл и читает файловый указатель

// на головную вершину дерева, по которой загружает дерево

// в память

ftree *LoadTree(char *name)
{
FILE *fd;
long phead;
if ((fd = fopen(name,"rb")) ==NULL) return(NULL);
fread((void*)&#38phead, sizeof(long), 1, fd);
return GetTree(phead, fd);
}


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий