哈希表的简单构造以及拉链式解决冲突
哈希表
用来存储特定形式的元素,存储到不同的键值中,例如在一个数组中{1,2,3,3,4},我们要统计各个元素的数量,可以创建一个数组a[5],a[0]代表0的个数a[1]代表1的个数…,数组的大小取决于数组中最大值和最小值,如果最大值非常大,就没办这样创建哈希表,于是我们可以创建一个小的哈希表,那要怎么表示大的数据呢,可以对大的数据与哈希表的长度进行取余,但是这时可能会有元素之间的冲突,两个元素占据同一个位置,所以就有了拉链式解决冲突
拉链式解决冲突
这里哈希表的每个节点都定义为单链表,然后如果出现冲突元素,就把该元素存到链表头的位置
代码部分
1.单链表定义
成员需要有一个自身的值,代表该元素的值,还需要一个指针,指向下一个节点
struct ListNode //单链表
{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL) {
};
};
2.寻找元素的键值
直接用当前元素与哈希表的长度取余
int hash_func(int key,int table_len) //返回当前元素应该在的位置
{
return key%table_len;
}
3.头插法向哈希表中插入元素
每次插入都插入该链表中头的位置,然后更新头节点
//头插法
void