代码在 C 中。我有两种类型的对象 ( structs
) 具有父子关系,一种父类型可以有0
或多个子类型,一个子不能有自己的子。我需要O(1)
父查找(通过uID
结构成员)和子查找(也通过uID
struct member) 不知道谁是它的父级。一旦我有一个指向父母的指针,我希望能够遍历它的孩子。当我有一个指向孩子的指针时,我希望能够知道谁是它的父母。在程序执行期间,可以删除或插入任何子项或任何父项,并且子项可以更改其父项。当父母被移除时,它的孩子也应该被移除。所有这一切都应该在多线程环境中完成,所以我需要线程安全的读取(我将使用只读锁进行密钥搜索,使用读写锁进行插入/删除/重新设置)。你会推荐什么数据结构?
添加:
目前我正在尝试使用 uthash 库(http://uthash.sourceforge.net/)来实现它:
struct parent
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct child *first_child;
UT_hash_handle hh;
};
struct child
{
uint64_t uid;
time_t mtime;
struct ldata data;
struct parent *parent;
UT_hash_handle hh;
};
struct parent *parents_list = NULL;
struct child *children_list = NULL;
问题是当一个新孩子到来时,它最终会被排在后面,并且与它的“兄弟”没有联系。