创建邻接列表

时间:2015-04-13 01:13:26

标签: c++ data-structures linked-list adjacency-list

我正在学习创建邻接列表,而且我对此非常陌生。我试图在我的程序上测试一个。我想在链表中创建一个顶点,然后创建一个列表或" edge"在该链表中。我在这里创建一个链接但不确定如何在链表中实际创建一个。我已经创建并测试了我的链表类,我知道它有效,我只需创建一种方法将其实现到邻接列表中。另外,我可以使用C ++库中的任何列表函数。

我的代码是否正朝着正确的方向前进?

#include "Vertex.h"

Vertex::Vertex(){
    neighbors = new LinkedList();
    discover = 0;
    finish = 0;
    pi = NULL;
    color = "white";
}

Vertex::~Vertex(){
   delete neighbors;
}

void Vertex::insert(Vertex* vertex){

    LinkedList *temp = new LinkedList();

if(index == 0){
    temp->insertElement(vertex);
    index++;
    if(index != 0){
        neighbors->insertElement(vertex);
    }
}

} 这是我的主要人物。提前谢谢!

 #include <cstdlib>
#include <iostream> //to use cin and cout
#include <string> //to use strings
#include "LinkedList.h"

using namespace std;

int main (){

Vertex *vertex1 = new Vertex();

for (int i =0; i < 10; i++){
   vertex1->insert(vertex1);
}

修改了一些内容

1 个答案:

答案 0 :(得分:1)

最直接的方法是每个顶点的LinkedList将包含该顶点所邻近的所有其他顶点的列表。

您没有提供LinkedList实现的详细信息,我假设您的insert()方法的目的是记录两个顶点彼此相邻,thisvertex相邻{1}}参数。

如果这些假设是正确的,那么我希望你的insert()方法应该是这样的:

void Vertex::insert(Vertex* vertex)
{
    neighbors->add(vertex);
    vertex->neighbors->add(this);
}

neighbors类中有一个Vertex成员,我认为该成员会包含一个与其他Vertex es相关的指针列表。

因此,要记录两个顶点彼此相邻,您必须在另一个顶点的neighbors方法中记录它们中的每一个。

您只需要实现add(),以附加指向链接列表的指针。

现在,当您需要查找与给定Vertex相邻的所有顶点时,您只需迭代其neighbors链接列表中的顶点。因此,迭代对中的每个顶点最终也会包含另一个顶点。

你的家庭作业是:

1)你的析构函数不完整。只需删除矩阵中的所有顶点,只需删除neighbors成员即可。如果您希望能够从邻接矩阵中删除顶点,但仍然保留其余部分,则显然需要从Vertex列表中删除所有neighbors中的Vertex { {1}}被破坏的顶点与。

相邻

2)一些基本的错误检查,如果你的代码在它们已被链接为彼此相邻之后试图链接两个相邻顶点,那么做一些合理的事情。