数据结构——哈希表

数据结构——哈希表

哈希表(Hash Table),也称为散列表,是一种常见的数据结构,用于高效地存储和检索数据。它通过将键(Key)映射到存储桶(Bucket)中的位置来实现快速的查找和插入操作。

哈希表使用哈希函数(Hash Function)将键转换为整数索引,然后将索引映射到存储桶中。理想情况下,每个键应该被映射到不同的索引,以避免冲突。然而,在实际应用中,可能会出现多个键映射到同一个索引的情况,即哈希冲突。为了解决冲突,哈希表使用解决冲突的方法,例如链地址法(Chaining)或开放地址法(Open Addressing)。

以下是一个用 C++ 实现的哈希表的示例,使用链地址法解决冲突:

#include 
#include 
#include 

class HashTable {
private:
    int size;  // 哈希表的大小
    std::vector<std::list<int>> table;  // 存储桶,每个桶用链表表示

    // 哈希函数,将键映射为索引
    int hash(int key) {
        return key % size;
    }

public:
    // 构造函数
    HashTable(int tableSize) : size(tableSize), table(tableSize) {}

    // 插入键值对到哈希表
    void insert(int key) {
        int index = hash(key);
        table[index].push_back(key);
    }

    // 查找键是否在哈希表中
    bool search(int key) {
        int index = hash(key);
        std::list<int>& bucket = table[index];
        for (int val : bucket) {
            if (val == key) {
                return true;
            }
        }
        return false;
    }
};

int main() {
    HashTable hashTable(10);

    // 插入键值对到哈希表
    hashTable.insert(12);
    hashTable.insert(25);
    hashTable.insert(7);

    // 查找键是否在哈希表中
    bool found = hashTable.search(25);
    std::cout << "键 25 " << (found ? "存在" : "不存在") << " 哈希表中" << std::endl;

    return 0;
}

上述示例中,定义了一个哈希表的类 HashTable,使用了链地址法解决冲突。构造函数中接收哈希表的大小,初始化存储桶。类提供了插入键值对和查找键是否在哈希表中的方法。

在 main 函数中,首先创建了一个哈希表对象 hashTable,大小为 10。然后通过调用 insert 方法将键值对插入哈希表中。接着,调用 search 方法查找键 25 是否在哈希表中,并输出结果。输出结果为:

25 存在哈希表中

这个示例展示了哈希表的基本操作,包括插入键值对和查找键。哈希表是一种高效的数据结构,常用于需要快速插入和查找数据的场景。通过合适的哈希函数和解决冲突的方法,可以提供接近常数时间复杂度的插入和查找操作。

你可能感兴趣的:(数据结构,数据结构)