1.哈希表的概念
哈希表(Hash table,也叫散列表),是根据关键码值(Key-value)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。
哈希函数:也称为是散列函数,是Hash表的映射函数,它可以把任意长度的输入变换成固定长度的输出,该输出就是哈希值。通过使用哈希函数来确定元素在哈希表的存储位置,哈希函数能使对一个数据序列的访问过程变得更加迅速有效,通过哈希函数,数据元素能够被很2快的进行定位。
2.哈希表的代码
2.1.添加
void increase(long long data){//定义函数
int now_key=(data+int_MAX_prime)%int_MAX_prime;//确定大概的位置
while(hash[now_key]!=-1)now_key=(now_key+1)%int_MAX_prime;//线性搜索添加
hash[now_key]=data;//搜索到位置之后就添加
return ;//函数结束
}
2.2.去除
void reduced(long long data){//定义函数
int now_key=(data+int_MAX_prime)%int_MAX_prime;//找到大概位置
while(hash[now_key]!=data){//开始循环线性搜索
if(hash[now_key]==-1)return ;//如果没有就退出
now_key=(now_key+1)%int_MAX_prime;//搜索下一个
}hash[now_key]=-1;//去除
return ;//函数结束
}
2.3.查找下标
int find(long long data){//定义函数
int now_key=(data+int_MAX_prime)%int_MAX_prime;//确定大概位置
while(hash[now_key]!=data){//开始线性搜索
if(hash[now_key]==-1)return -1;//没找到就返回-1
now_key=(now_key+1)%int_MAX_prime;//搜索下一个
}return now_key;//返回位置+函数结束
}
2.4.查找存在
bool count(long long data){//定义函数
int now_key=(data+int_MAX_prime)%int_MAX_prime;//确定大概位置
while(hash[now_key]!=data){//开始线性搜索
if(hash[now_key]==-1||(hash[now_key]+int_MAX_prime)%int_MAX_prime!=(data+int_MAX_prime)%int_MAX_prime)return false;//没找到就返回没找到
now_key=(now_key+1)%int_MAX_prime;//搜索下一个
}return true;//返回找到了+函数结束
}
2.5.判空
bool empty(){//创建函数
for(int i=0;i<int_MAX_prime;i++)if(hash[i]!=-1)return false;//有数就返回有数
return true;//放回空的+函数结束
}
2.6.长度
size_t size(){//创建函数
unsigned long long numeral=0;//创建点数的变量 /!\注:只有64位藏能用long long,32位用int,16位用short,否则电脑容易报废
for(int i=0;i<int_MAX_prime;i++)if(hash[i]!=-1)numeral++;//点数中
return numeral;//返回数量+函数结尾
}