9;єкта але у неї є непусті "нащадки". Вставка в цю вершину відбудеться тільки якщо значення об'єкта знаходиться в проміжку значень об'єктів вершини, інакше вставка буде проведена або в ліве, або в праве піддерево. br/>
2.5 Алгоритм стиснення файлу
Частково алгоритм стиснення схожий на алгоритм видалення проміжної вершини, описаний в попередньому пункті. Важливою особливість алгоритму є те, що одночасно із стисненням відбувається і балансування дерева. Коротко алгоритм можна описати так:
) Збір інформації про дерево (кількість об'єктів)
2) Оголошення масиву в оперативній пам'яті розміром з кількість об'єктів у дереві
) Збір об'єктів з дерева в масив
) Створення на основі масиву нового дерева у файлі
Таким чином, видно, що з файлу витягується тільки корисна інформація, а весь "сміття" видаляється при пересоздании файлу.
В
Малюнок 9. Стиснення файлу та балансування дерева
3. Функціональне опис розробки
Допоміжні методи
Шаблон клас бінарногодерева успадковується від класу двонаправленого введення/виводу у файл fstream. Спадкування публічне. p align="justify"> template BinaryTree: public fstream;
Параметр шаблону class T і є тип об'єкта, що зберігається в дереві.
Для полегшення роботи з файловими покажчиками і максимального наближення стилю роботи до звичайних вказівниками були введені методи, позбавляють програміста від багаторазового використання методів позиціонування в файлі і читання/запису до/з файл (а).
Метод: ulong filemalloc (M val);
Виділення пам'яті у файлі і запис в неї об'єкта типу M. Метод записує об'єкт в кінець файлу, тому ймовірність затерти інші дані виключена. Повертається файловий покажчик на об'єкт. Використовується при додаванні об'єкта в масив покажчиків. p align="justify"> Метод: voidreadvar (ulongp, R & rez);
Читання даних розміром sizeof (R) в об'єкт типу R з файлу за вказівником p.
Метод: void writevar (ulong p, R & var);
Запис даних розміром sizeof (R) у файл за вказівником p.
У роботі використовуються тільки ці функції при роботі з файлом, за винятком тих випадків, коли потрібно записати масив.
Поля класу
ulong root;// покажчик на кореневу вершину у файлі * name;// ім'я поточного файлу
Для визначення стану о...