-4

所以如果我有一个双链表,我想添加一个名字和一个年龄,这样我就可以分别搜索我该怎么做?

4

2 回答 2

0

链表非常适合在多个键中排序:

 item0:   age=1             item1:    age=99;
          name='z'                    name='a';
          next_age=item1              next_age=NULL;
          next_name=NULL              next_name=item0

基本上唯一需要考虑的额外事情是如何安排列表遍历算法以共享并且不知道下一个/上一个链接的位置。

一种解决方案是将列表结构包装为:

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

于 2012-12-23T10:12:07.087 回答
0

你问,

“所以如果我有一个双链表,我想添加一个名字和一个年龄,这样我就可以分别搜索,我该怎么做?”

实际上,您不会为此目的实现双向链表。相反,您将使用标准库容器,例如std::vector. 或std::map

但鉴于这是为了学习,问题是问题是什么……

你在问,你怎么能让每个节点同时参与两个链表。

一种简单的方法是让列表节点只包含指向数据节点的指针。俗话说,任何计算机科学问题的解决方案都是额外的间接层。当然这也是解决过多间接问题的方法。:-p

于 2012-12-23T10:00:58.133 回答