1

我有两个问题,首先我正在尝试创建一个哈希表:我是否正确地实例化了数组?我正在尝试创建一个指向链表的动态指针数组以进行链接:链表节点按值存储。我认为我的 ItemType** 语法不正确,但我不确定:这是我的理解,如果我弄错了,请纠正我。

第一个 * 将 'HashArray' 实例化为一个数组,然后第二个 * 将其实例化为一个指向每个链表头部的指针数组:我应该指向一个节点。Node嵌套在LinkedList中;虽然是公开的。无论如何,这听起来很荒谬,但它应该读到类似“LinkedList::Node::ItemType** HashArray”的内容吗?有什么建议么?

编辑:为简单起见,我没有包括我的复制/删除/分配构造函数:

编辑2:我也没有包括我的“哈希”/“增长函数”/“收缩函数”。显然,在我写好插入内容并且模板事先工作之前,编写删除函数等是没有意义的……让我知道发布更多我所拥有的内容是否有帮助。现在我收到编译错误

C2440: '=' : 无法从 'list< type >' *' 转换为 'std::string *'

HashArray[索引] = 链表;

这应该有助于确定问题

template <typename ItemType>
class HashSet {


int oldCapacity;
int capacity;
int size;
ItemType** HashArray;

HashSet()   {
    HashArray = new ItemType*[capacity] ;
    memset(HashArray, 0, sizeof(ItemType*)*capacity);
    size=0;
    capacity = 0;
    oldCapacity = 0;
}

void insert(const ItemType& item){
    list <ItemType> *LinkedList= new list<ItemType>();
    unsigned int index = hash(item);

    if(HashArray[index]== NULL)
    {
    LinkedList->pushback(item);
    HashArray[index] = LinkedList;
    }
    else if(!LinkedList->find(item)) //if it's not in the list
    {
    LinkedList->pushback(item);
    HashArray[index] = LinkedList;
    }
    else //in list already
        return;

}
}
4

0 回答 0