哈希表及解决冲突

本文介绍了哈希表的概念,以及如何使用拉链法解决哈希冲突。通过定义一个包含多个链表的散列表,将同义词结点链接在一起。哈希表的实现包括了哈希函数的定义、查找和插入操作。当哈希冲突发生时,新元素会被插入到对应哈希值的链表中。
摘要由CSDN通过智能技术生成

什么是哈希表
适用场景

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

在这里插入图片描述


struct HashNode 
{
    int key;
    int value;
};
cla
ss 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值