所以,如果我有一个双链表,我想添加一个名字和一个年龄,那么我可以分别搜索两个怎么办?
答案 0 :(得分:0)
你问,
“所以,如果我有一个双链表,我想添加一个名字和一个年龄,那么我可以单独搜索两个怎么办?”
实际上,您不会为此目的实施双向链表。相反,您将使用标准库容器,例如std::vector
。或std::map
。
但鉴于这是为了学习,问题是问题是什么......
我想你在问,你怎么能让每个节点同时参与两个链表。
一种简单的方法是让列表节点只包含指向数据节点的指针。俗话说,任何计算机科学问题的解决方案都是一个额外的间接层。当然,这也是太多间接问题的解决方案。 :-P
答案 1 :(得分:0)
链接列表非常适合按多个键排序:
item0: age=1 item1: age=99;
name='z' name='a';
next_age=item1 next_age=NULL;
next_name=NULL next_name=item0
基本上唯一需要考虑的是如何安排列表遍历算法进行共享,以及对下一个/ prev链接的位置无知。
一种解决方案是将列表结构包装到:
struct list_s {
struct list_s *next;
struct list_s *prev;
void *key_ptr;
struct master_struct_s *parent;
}
struct master_struct_s {
struct list_s key1;
struct list_s key2;
struct list_s key3;
int other_data;
}
现在,列表排序算法可以使用& key1,& key2或& key3,并可能引用other_data的内容,因为每个列表结构都引用“父”结构或它们自己的容器。