2015-04-13 65 views
0

我正在学习创建邻接表并且对此很新。我试图在我的程序上测试一个。我想在链接列表中创建一个顶点,然后在该链接列表中创建一个列表或“边”。我在这里创建了一个链接,但不知道如何在链接列表中实际创建一个。我创建并测试了链表,我知道它的工作原理,我只需要创建一种方法将其实现到邻接表中。另外,我不能使用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

代码中有太多'new's。你的拷贝构造函数等在哪里? –

+0

我会创建一个while循环或一个索引,并增加创建的对象?@NeilKirk – Slae

+1

我不明白。你也不应该在你的函数中使用静态变量。 –

回答

1

最直接的做法是将每个顶点的链表将包含所有其他顶点这个顶点是相邻的列表。

您没有提供您的LinkedList实现的细节,并且我相信,你的insert()方法的目的是为了记录这两个顶点是相邻的,即this毗邻vertex参数。

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

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

你必须在Vertex类,我假设将包含指针列表的neighbors成员与其他Vertex es是相关的。

因此,要记录两个顶点彼此相邻,必须将其中的每个顶点记录在其他顶点的neighbors方法中。

你只需要执行add(),将一个指针附加到链接列表。

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

你的家庭作业是:

1)你的析构函数是不完整的。只要删除矩阵中的所有顶点,只需删除neighbors成员即可。如果你希望有能力去除邻接矩阵中的顶点,但仍然保留其余部分,那么显然需要删除,该Vertex被所有Vertex中的neighbors列表所销毁,即被破坏的顶点是相邻的至。

2)一些基本的错误检查,如果你的代码试图链接两个相邻的顶点后,他们已经被链接为彼此相邻,做些明智的事情。