什么是哈希表
适用场景
解决哈希冲突
拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为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;
}