【问题标题】:Vector of Doubly Linked Lists of Doubly Linked List Pointers双链表指针的双链表向量
【发布时间】:2015-09-05 22:27:16
【问题描述】:

我有一个包含双向链接列表的向量(即 std::vector),然后每个双向链接列表将包含指向向量中另一个双向链接列表的指针。

下面是我所说的一个例子:

假设我们有以下双向链表向量,{ {1,2,0} ,{0,2,1,5}, {2,1,0,4,5} ,{4, 5,1,0},{5,4}}。

让我们看一下向量 {1,2,0} 中的第一个双向链表。我想要的是 1 指向列表 {1,2,0} 和 2 指向列表 {2,1,0,4,5} 和 0 指向 {0,2,1,5}向量中的其他列表也是如此。

除了这种结构之外,如果我们置换向量的元素,我还需要指针指向正确的列表。

所以,比如说,如果在上面的例子中我交换了向量中的前两个列表,那么:

{ {0,2,1,5},{1,2,0},{2,1,0,4,5},{4,5,1,0},{5,4} }

我仍然希望在列表 {1,2,0} 中 1 指向 {1,2,0},2 指向 {2,1,0,4,5},0 指向 {0,2 ,1,5}。

所以我能够实现每个部分,直到最后一部分。

到目前为止,我为这部分所做的是,在排列之前,我可以让每个列表中的所有 0 都指向 &vector[1],然后在排列之后,我必须遍历每个列表中的每个元素找到 0 并将它们指向 0 的新位置,因此它们会指向说 &vector[k]。

问题是我必须在每个列表中搜索 0,但我不想进行搜索。那么有什么方法可以实现这一点而无需进行搜索? (代码是C++)

【问题讨论】:

  • 你为什么需要这么复杂和不规范的数据结构?看来您的问题是 XY 问题。
  • 我试图为多面体的顶点和邻居实现一个结构。所以链表的每个头都是一个顶点,然后下面的指针是该顶点的邻居。
  • 指向向量中元素的指针很棘手,可能不值得做。每次在向量中添加、删除或移动内容时,指针都会发生变化。我建议重新考虑。

标签: c++ list vector data-structures


【解决方案1】:

除了您描述的问题之外,将结构直接存储在向量中的另一个问题是向量上的某些操作会使指向向量的部分或全部现有指针无效。即从向量中删除或插入元素。

一般来说,在这种情况下,向量最好存储指向对象的指针,而不是对象本身。在您的示例中,std::vector< DoublyLinkedList *> 会更好地工作。 DoubleLinkedList 的各种实例可以直接存储彼此的指针,并且在向量中移动指针不会对其有效性产生任何影响。

当然,此解决方案还有一些其他问题需要解决,例如堆管理,必须解决。但那将是一个不同的问题。

【讨论】:

    猜你喜欢
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多