這可能不是合適的詞,所以如果任何人都可以告訴我這個數據類型實際上被稱爲,那將不勝感激。雙星陣列
我有一個編程任務,在這個任務中我必須實現一個哈希映射作爲教授這樣的一個拖尾鏈表的數組。
LN** map = nullptr;
該數組的每個索引都應該從尾部節點開始,這就是我遇到問題的地方。每當我嘗試將數組長度加倍時,代碼以某種方式將數量相等的尾部節點放在索引爲零的數組的長度上。在我做了一堆插入之後,哈希映射通常看起來像這樣。
// # Represents nullptr
// pair[,] is a trailer.
map m = bin[0]: pair[,] -> pair[,] -> pair[,] -> pair[,] -> pair[,] -> pair[,] -> pair[,] -> pair[,] -> #
bin[1]: pair[Shirley,Peanutbuttercup] -> pair[,] -> #
bin[2]: pair[Nicholas,Kafka] -> pair[,] -> #
bin[3]: pair[,] -> #
bin[4]: pair[Sora,Phammyy] -> pair[,] -> #
bin[5]: pair[Selv,Anthony] -> pair[,] -> #
bin[6]: pair[,] -> #
bin[7]: pair[,] -> #
這很奇怪,考慮到我的代碼加倍數組是。
bins *= 2;
map = new LN*[bins];
for (int i=0; i<bins; i++) {
map[i] = new LN();
}
while (!q.empty()) {
Entry e = q.dequeue();
int hash = hash_compress(e.first);
map[hash] = new LN(e, map[hash]);
}
我不希望任何人能夠調試我的代碼(雖然在起飛的機會,任何人都可以,那將是巨大的),但我會很感激,如果任何人都可以詳細介紹一下這個數據類型,以便我可以更好地找出我搞砸的地方。如果你想保持你的PROFS一個「拖」節點的概念
LN被定義爲
private:
class LN {
public:
LN() : next(nullptr){}
LN (const LN& ln) : value(ln.value), next(ln.next){}
LN (Entry v, LN* n = nullptr) : value(v), next(n){}
Entry value; // typedef ics::pair<KEY,T> Entry; declared earlier
LN* next;
};
這就是所謂的一個指針LN的指針。或者你可以把它叫做二維指針數組LN – JonPall
爲什麼不用std :: vector>呢?不使用STL的要求? –
JonPall
我很樂意使用簡單的東西,但我們必須使用教授給我們的數據類型。 – Nicholas