具有两个值的双链接列表节点

时间:2012-12-23 08:19:39

标签: c++ linked-list

所以,如果我有一个双链表,我想添加一个名字和一个年龄,那么我可以分别搜索两个怎么办?

2 个答案:

答案 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的内容,因为每个列表结构都引用“父”结构或它们自己的容器。