📅  最后修改于: 2023-12-03 15:23:28.396000             🧑  作者: Mango
分离链接是一种避免散列表碰撞的方法,它将散列表中冲突的元素以链表的形式连接起来。在 C++ STL 中实现分离链接,可以使用 std::list 容器来实现。
#include <iostream>
#include <list>
#include <string>
using namespace std;
class HashTable {
private:
int size; // 散列表容量
list<string>* table; // 存储散列表的数组,每个元素是一个链表
public:
HashTable(int size) {
this->size = size;
table = new list<string>[size];
}
~HashTable() {
delete[] table;
}
// 计算 hash 值
int hash(string key) {
int sum = 0;
for (int i = 0; i < key.length(); i++) {
sum += key[i] * i;
}
return sum % size;
}
// 在散列表中插入元素
void insert(string key) {
int index = hash(key);
table[index].push_front(key);
}
// 在散列表中查找元素
bool find(string key) {
int index = hash(key);
for (auto it = table[index].begin(); it != table[index].end(); it++) {
if (*it == key) {
return true;
}
}
return false;
}
};
int main() {
// 创建一个容量为 10 的哈希表
HashTable ht(10);
// 插入元素
ht.insert("hello");
ht.insert("world");
ht.insert("programming");
ht.insert("algorithm");
// 查找元素
cout << boolalpha << ht.find("hello") << endl; // true
cout << boolalpha << ht.find("world") << endl; // true
cout << boolalpha << ht.find("programming") << endl; // true
cout << boolalpha << ht.find("algorithm") << endl; // true
cout << boolalpha << ht.find("cpp") << endl; // false
return 0;
}
该程序实现了一个分离链接的哈希表,主要分为以下几个部分:
程序中主函数演示了如何使用该分离链接的哈希表,首先创建一个容量为 10 的哈希表,然后插入一些元素,最后查找一些元素是否在哈希表中。