双向链接列表指针的双重链接列表的向量

时间:2015-09-05 22:27:17

标签: c++ list vector data-structures

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

这是我正在谈论的一个例子:

所以我们假设我们有以下双重链表的向量,{{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 ++编写)

1 个答案:

答案 0 :(得分:1)

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

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

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