2015-04-13 64 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)一些基本的錯誤檢查,如果你的代碼試圖鏈接兩個相鄰的頂點後,他們已經被鏈接爲彼此相鄰,做些明智的事情。