Поскольку вы просите о помощи, не имея абсолютно ничего для начала, я покажу вам несколько примеров структур данных, которые могут работать, а также API.
В C можно реализовать узлы со структурами,Примерно так:
struct quadtree {
int size;
struct node *root;
};
struct node {
struct node *children[4];
};
А затем, чтобы прикрепить объекты в дереве quadtree, вы можете добавить несколько дополнительных полей.
struct object {
int x, y;
// plus extra info not related to quadtree
};
struct node {
struct node *children[4];
int nobjects;
struct object *objects;
};
Интерфейс дерева quadtree даст вам несколько основных операций:
void quadtree_insert(struct quadtree *q, struct object *obj);
void quadtree_remove(struct quadtree *q, struct object *obj);
// Equivalent to remove + insert, but more efficient
void quadtree_move(struct quadtree *q, struct object *obj, int x, int y);
int quadtree_query(struct quadtree *q, struct object **obj, int max,
int x0, int y0, int x1, int y1);
Вот и все, в основном.Но реализация не будет тривиальной.Обратите внимание, что максимальная глубина этого квадродерева составляет около 32, что может несколько упростить реализацию.
Если у вас возникли проблемы, я предлагаю сделать шаг назад и сначала обратиться к аналогичной, но более простой структуре данных.Например, попробуйте реализовать красно-черное дерево или дерево AVL без использования исходного кода в качестве ссылки.Если вы не очень хорошо разбираетесь в программировании на C, тогда квад-дерево может оказаться плохим выбором для первого проекта из-за его умеренной сложности.