【发布时间】: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