Создайте контейнер, содержащий оба, с функциями / методами доступа (в зависимости от вашего языка реализации), который выполняет все операции, необходимые для вашего алгоритма.
IE:
Удалить из контейнера: выполняет удаление из двоичного файла и из хэша.
Добавить в контейнер: добавляет в двоичный файл и в хэш.
EDIT:
О, задание - весело! :)
Я бы сделал это:
по-прежнему реализовать контейнер. Но вместо использования стандартной библиотеки для btree / hash, реализуйте их следующим образом:
Создайте тип, который можно вставить в элемент данных, имеющий указатель на узел BTree и узел Hashtable, в котором находится элемент данных.
Чтобы удалить элемент данных с указателем на него, вы можете выполнить алгоритм удаления на btree (перейти к родительскому элементу из указателя узла, удалить дочерний элемент (влево или вправо), реструктурировать дерево) и в хеш-таблице (удалить). из хэш-списка). При добавлении значения выполните алгоритм добавления для btree и hash, но перед возвращением убедитесь, что вы обновили указатели узлов в данных.
Какой-то псевдокод (я буду использовать C, но я не уверен, какой язык вы используете):
typedef struct
{
BTreeNode * btree
HashNode * hash
} ContianerNode;
чтобы поместить данные в ваш контейнер:
typedef struct
{
ContainerNode node;
void* data; /* whatever the data is */
} Data;
BTreeNode имеет что-то вроде:
typedef struct _BTreeNode
{
struct _BTreeNode* parent;
struct _BTreeNode* left;
struct _BTreeNode* right;
} BTreeNode;
и HashNode имеет что-то вроде:
typedef struct _HashNode
{
struct _HashNode* next;
} HashNode;
/* ala singly linked list */
и ваш BTree будет указателем на BTreeNode, а ваш hastable будет массивом указателей на HashNodes. Как это:
typedef struct
{
BTreeNode* btree;
HashNode* hashtable[HASHTABLESIZE];
} Container;
void delete(Container* c, ContainerNode* n)
{
delete_btree_node(n->btree);
delete_hashnode(n->hash);
}
ContainerNode* add(Container* c, void* data)
{
ContainerNode* n = malloc(sizeof(ContainerNode));
n->btree = add_to_btree(n);
n->hash = add_to_hash(n);
}
Я позволю вам выполнить эти другие функции (не могу выполнить все задание за вас;))