其他分享
首页 > 其他分享> > 哈希表及解决冲突

哈希表及解决冲突

作者:互联网

解决哈希冲突
拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数组t[0…m-1]。凡是散列地址为i的结点,均插入到以t为头指针的单链表中。t中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于1,但一般均取α≤1。

在这里插入图片描述


class HashTable {
public:
    HashTable():vec(HashSize) {
        cout << "set up" << endl;
    };

    int hash(int key);
    bool find(int key);
    bool insert(int key, int value);

    ~HashTable();

private:
    vector<list<HashNode>> vec;
};


HashTable::~HashTable()  {
    cout << "delete HashTable" << endl;
}

int HashTable::hash(int key) {
    return (key % 13);
}

bool HashTable::find(int key) {
    int hashNum = hash(key);
    for (auto it = vec[hashNum].begin(); it != vec[hashNum].end(); ++it) {
        if (it->key == key) {
            cout << "find" << key << endl;
            return true;
        }
    }
    cout << "can not find" << key << endl;
    return false;
}

bool HashTable::insert(int key, int value) {
    int hashNum = hash(key);
    HashNode node;
    node.key = key;
    node.value = value;
    for (int i = 0; i < HashSize; i++) {
        if (hashNum == i) {
            vec[hashNum].push_back(node);
            return true;
        }
    }
    return false;
}

标签:node,HashTable,哈希,int,表及,vec,key,hashNum,冲突
来源: https://blog.csdn.net/lingzhe7428/article/details/118398223