c++在散列表采用链地址法插入数据元素e,插入成功返回true,否则返回false
时间: 2023-09-20 19:10:51 浏览: 73
单链表尾插法(C++源代码)
4星 · 用户满意度95%
下面是使用链地址法实现散列表插入数据元素的C++代码,其中假设散列表中存储的元素是整数:
```c++
#include <iostream>
#include <vector>
using namespace std;
class HashTable {
private:
vector<vector<int>> table;
int size;
static const int DEFAULT_SIZE = 10; // 默认散列表大小
public:
HashTable() : size(DEFAULT_SIZE) {
table.resize(size);
}
HashTable(int size) : size(size) {
table.resize(size);
}
// 散列函数,这里采用简单的取模法
int hash(int key) {
return key % size;
}
bool insert(int elem) {
int index = hash(elem); // 计算插入位置
for (int i = 0; i < table[index].size(); i++) {
if (table[index][i] == elem) { // 如果元素已经存在,返回false
return false;
}
}
table[index].push_back(elem); // 插入元素
return true;
}
};
int main() {
HashTable ht;
ht.insert(1);
ht.insert(2);
ht.insert(11);
ht.insert(21);
ht.insert(31);
return 0;
}
```
在上述代码中,`HashTable` 类表示散列表,使用 `vector<vector<int>>` 存储数据,其中 `table[i]` 表示散列值为 `i` 的所有元素。插入元素时,先计算元素的散列值,然后在对应的 `vector<int>` 中查找是否已经存在该元素,如果不存在,则插入到末尾。
阅读全文