2015-11-03 60 views
1

我試圖創建一個數據結構,存儲每個頂點在散列表中與單獨的鏈接。這可以很容易地完成使用矢量來存儲每個頂點,但我想恆定的時間搜索,所以我試圖用哈希表來實現它。哈希表中的第一個節點被稱爲hashNode,它將包含一個vertex指針,一個next指針的node類型,以及一個名爲blockCount的int。 node類型將包含一個vertex指針和一個node指針。試圖使用散列表(使用鏈接)作爲我的頂點列表的圖數據結構

我遇到的問題是我無法訪問我的chainingTable類中的vertex類中的成員。當我嘗試在chainingTable類中嘗試製作vertex對象或指針時,出現錯誤,說明vertex未定義。我知道這是說,因爲chainingTable不知道vertex類存在,但我有很多麻煩試圖解決它。我嘗試過使用繼承和friend關鍵字,但我認爲我沒有正確使用它們。任何幫助,將不勝感激。謝謝。

這是我到目前爲止的代碼。在chainingHashTable.h,

#pragma once 
using namespace std; 

class chainingTable 
{ 
    class node; 
public: 
    chainingTable(int size = 100) 
     :hashTable(size), currentSize(0) {} 

    struct hashNode 
    { 
     vertex * v; 
     node * next; 
     int blockCount; 
    }; 

    struct node 
    { 
     vertex * v; 
     node * next; 
    }; 

    void insert(vertex * v); 
    bool contains(vertex * v); 
    unsigned int getNumItems(); 
    double averageSearchCost(); 

private: 
    unsigned int currentSize; 
    unsigned int hashFunc(string word); 
    vector<hashNode> hashTable; 
}; 

unsigned int chainingTable::hashFunc(string word) 
{ 
    unsigned int sum = 0; 
    unsigned int pow = 1; 

    for (int i = 0; i < word.length(); i++) 
    { 
     sum = sum + word[i] * pow; 
     pow = pow * 26; 
    } 
    return sum % hashTable.size(); 
} 

void chainingTable::insert(vertex * v) 
{ 

} 

directedWeightedGraph.h:

#pragma once 
#include "chainingHashTable.h" 
using namespace std; 

class directedWeightedGraph 
{ 
    class edge; 
    class vertex 
    { 
    public: 
     string data; 
     list<edge> edgeList; 
     vertex(string x) 
     { 
      data = x; 
     } 
    }; 

    class edge 
    { 
    public: 
     vertex * start; 
     vertex * end; 
     double weight; 

     edge(vertex * s, vertex * e, double w) 
     { 
      start = s; 
      end = e; 
      weight = w; 
     } 
    }; 

    chainingTable vertexList; 

public: 
    void addVertex(string v); 
    void addEdge(string s, string d, double w); 
    void display(); 

}; 

,我知道使用using namespace std是不好的做法,但這一計劃將只能由我來使用,只是練習圖形和哈希表。我喜歡更清潔的代碼:]

回答

0

首先,沒有#include directedWeightedGraph.hchainingHashTable.h。這只是開始...