用C++写一个哈希链表的代码
时间: 2024-10-23 09:09:18 浏览: 26
在C++中,我们可以创建一个简单的哈希链表(也称为散列表)数据结构,它结合了数组和链表的优点。这里是一个基础版本的实现,包含哈希函数、桶的表示以及插入和查找操作:
```cpp
#include <iostream>
#include <list>
class HashNode {
public:
int key;
int value;
HashNode* next;
HashNode(int k, int v) : key(k), value(v), next(nullptr) {}
};
class HashTable {
private:
const int TABLE_SIZE = 10; // 假设我们有10个桶
HashNode** buckets; // 数组,存储每个桶的指针
public:
HashTable() {
buckets = new HashNode*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; ++i)
buckets[i] = nullptr;
}
~HashTable() {
delete[] buckets;
}
// 哈希函数
int hashFunction(int key) {
return key % TABLE_SIZE;
}
// 插入元素
void insert(int key, int value) {
int index = hashFunction(key);
if (!buckets[index])
buckets[index] = new HashNode(key, value);
else { // 如果该位置已经有节点,则遍历链表找到空闲位置插入
HashNode* current = buckets[index];
while (current->next != nullptr && current->key != key) {
current = current->next;
}
if (current->key == key)
return; // 避免重复插入
current->next = new HashNode(key, value);
}
}
// 查找元素
int find(int key) {
int index = hashFunction(key);
HashNode* current = buckets[index];
while (current != nullptr) {
if (current->key == key)
return current->value;
current = current->next;
}
return -1; // 如果未找到则返回-1
}
// 示例用法
void demonstrate() {
insert(5, "Five");
insert(7, "Seven");
std::cout << "Find key 5: " << find(5) << std::endl; // 输出: Find key 5: Five
std::cout << "Find key 6: " << find(6) << std::endl; // 输出: Find key 6: -1 (未找到)
}
};
int main() {
HashTable table;
table.demonstrate();
return 0;
}
```
阅读全文