这可能不是合适的词,所以如果任何人都可以告诉我这个数据类型实际上被称为,那将不胜感激。双星阵列
我有一个编程任务,在这个任务中我必须实现一个哈希映射作为教授这样的一个拖尾链表的数组。
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