【问题标题】:Double Linked List Node with two values [closed]具有两个值的双链表节点[关闭]
【发布时间】:2012-12-23 08:19:39
【问题描述】:

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

【问题讨论】:

  • 就这么做吧。将您需要的任何数据放入列表节点中。
  • 但这仍然允许我根据之后的年龄进行搜索吗?
  • 您是编写搜索代码的人。它可以为所欲为。

标签: c++ linked-list


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你问,

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

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

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

    认为你在问,如何让每个节点同时参与两个链表。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多