我試圖創建一個數據結構,存儲每個頂點在散列表中與單獨的鏈接。這可以很容易地完成使用矢量來存儲每個頂點,但我想恆定的時間搜索,所以我試圖用哈希表來實現它。哈希表中的第一個節點被稱爲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
是不好的做法,但這一計劃將只能由我來使用,只是練習圖形和哈希表。我喜歡更清潔的代碼:]