(1)冲突处理方法为:顺次循环后移到下一个位置,寻找空位插入。
(2)BKDE 字符串哈希
unsigned int hash_BKDE(char *str)
{
/* 初始种子seed 可取31 131 1313 13131 131313 etc.. */
unsigned int seed = 131;
unsigned int hash = 0;
while (*str)
{
hash = hash * seed + (*str++);
}
return (hash & 0x7FFFFFFF);
}

选做内容
每一种西文图书都有一个国际标准图书编号,它是一个10位的十进制数字,若要以它作关键字建立一个哈希表,当馆藏书种类不到10,000时,采用折叠法构造一个四位数的哈希函数。

 #include<iostream>
#include<string>
#include<string.h>
#include<stdlib.h> #define Datatype string
#define max 5000
using namespace std; typedef struct
{
Datatype data;
bool isnull;
}Hash;
Hash hashTable[max]; void initHash()
{ for(int i=;i<max;i++)
{
hashTable[i].isnull=;
}
cout<<"call initHash( )\n"<<endl; }
unsigned int hash_B(char *str)
{
/**初始种子seed**/
unsigned int seed=;
unsigned int hash=; while(*str)
{
hash=hash*seed+(*str++);
} return (hash&&0x7fffffff);
}
int insertHash(string str)
{
char ch[];
int index;
strcpy(ch,str.c_str());
index=hash_B(ch); if(hashTable[index].isnull == ) //没有发生冲突
{
hashTable[index].data = ch;
hashTable[index].isnull = ; }
else //当发生冲突的时候
{
while(hashTable[index].isnull == && index<max)
{
index++; //采用线性探测法,步长为1
}
if(index == max) //Hash表发生溢出
return -;
hashTable[index].data = ch;
hashTable[index].isnull = ; }
// cout<<"index: "<<index<<endl;
return ;
//hashTable[index].data=ch;
//hashTable[index].isnull=1;
} bool findHash(string str)
{ char ch[];
int index,i;
strcpy(ch,str.c_str());
index=hash_B(ch);
bool flag=; for(i=index;i<max;i++)
{
if(hashTable[i].isnull==)
{flag=;break;}
if(str==hashTable[i].data)
{flag=;break;}
} return flag; }
int main()
{
initHash();
int n,m,i,j;
cout<<"输入:"<<endl;
cin>>n;
string str;
for(i=;i<n;i++)
{
cin>>str;
if(insertHash(str)<)
{cout<<"溢出"<<endl;break;}
}
cin>>m;
bool e[m];
for(i=,j=;i<m;i++,j++)
{
cin>>str;
if(findHash(str))
e[j]=;
else
e[j]=;
}
for(j=;j<m;j++)
{
if(e[j])
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
cin>>n;
return ;
}
 #include<iostream>
#include<string>
#include<string.h>
#include<stdlib.h> #define Datatype string
#define max 10000
#define length 10
#define adr 4
using namespace std; typedef struct
{
Datatype data;
bool isnull;
}Hash;
Hash hashTable[max]; void initHash()
{ for(int i=;i<max;i++)
{
hashTable[i].isnull=;
}
cout<<"call initHash( )\n"<<endl; }
unsigned int hash_B(char *str)
{
int i,j;
int bit[length];
for(i=;i<length;i++)
{
bit[i]=str[i]-'';
// cout<<bit[i]<<" ";
}
cout<<endl; int ret=;
int temp=;
for(i=;i<adr;i++)
temp=temp*+bit[i];
ret+=temp;
temp=;
for(i=adr;i<adr*;i++)
temp=temp*+bit[i];
ret+=temp;
temp=;
for(i=adr*;i<length;i++)
temp=temp*+bit[i];
ret+=temp;
temp=;
ret=ret%;
cout<<"ret :"<<ret<<endl;
return ret;
}
int insertHash(string str)
{
char ch[];
int index;
strcpy(ch,str.c_str());
index=hash_B(ch); if(hashTable[index].isnull == ) //没有发生冲突
{
hashTable[index].data = ch;
hashTable[index].isnull = ; }
else //当发生冲突的时候
{
while(hashTable[index].isnull == && index<max)
{
index++; //采用线性探测法,步长为1
}
if(index == max) //Hash表发生溢出
return -;
hashTable[index].data = ch;
hashTable[index].isnull = ; }
// cout<<"index: "<<index<<endl;
return ;
//hashTable[index].data=ch;
//hashTable[index].isnull=1;
} bool findHash(string str)
{ char ch[];
int index,i;
strcpy(ch,str.c_str());
index=hash_B(ch);
bool flag=; for(i=index;i<max;i++)
{
if(hashTable[i].isnull==)
{flag=;break;}
if(str==hashTable[i].data)
{flag=;break;}
} return flag; }
int main()
{
initHash();
int n,m,i,j;
cout<<"输入:"<<endl;
cin>>n;
string str;
for(i=;i<n;i++)
{
cin>>str;
if(insertHash(str)<)
{cout<<"溢出"<<endl;break;}
}
cin>>m;
bool e[m];
for(i=,j=;i<m;i++,j++)
{
cin>>str;
if(findHash(str))
e[j]=;
else
e[j]=;
}
for(j=;j<m;j++)
{
if(e[j])
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
cin>>n;
return ;
}

hash表的建立和查找的更多相关文章

  1. 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找

    千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...

  2. python 字典有序无序及查找效率,hash表

    刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的.后来接触到了字典查找效率这个东西,查了一下,原来字 ...

  3. Hash表的平均查找长度ASL计算方法

    Hash表的“查找成功的ASL”和“查找不成功的ASL” ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数: H(Key) = (key x 3) MOD 7 ...

  4. 深入了解STL中set与hash_set,hash表基础

    一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...

  5. 十一、从头到尾彻底解析Hash 表算法

    在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver  ...

  6. 【数据结构】非常有用的hash表

        这篇博客的目的是让尚未学会hash表的朋友们对hash表有一个直观的理解,并且能根据本文定义出属于自己的第一个hash表,但算不上研究文,没有深究概念和成功案例.         什么是has ...

  7. php 数据结构 hash表

    hash表 定义 hash表定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来 ...

  8. Hash 表详解(哈希表)

    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...

  9. (面试)Hash表算法十道海量数据处理面试题

    Hash表算法处理海量数据处理面试题 主要针对遇到的海量数据处理问题进行分析,参考互联网上的面试题及相关处理方法,归纳为三种问题 (1)数据量大,内存小情况处理方式(分而治之+Hash映射) (2)判 ...

随机推荐

  1. (转载)用PHP实现翻页

    (转载)http://blog.csdn.net/emili/article/details/5221744 原文参考http://www.cnblogs.com/xxcainiao/archive/ ...

  2. Android学习笔记(三)Application类简介

    每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广 ...

  3. HDU 2089 不要62(挖个坑=-=)

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. hdoj 4883 TIANKENG’s restaurant【贪心区间覆盖】

    TIANKENG’s restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...

  5. EassyUI内置方法与属性

    Jquery插件 easyUI属性汇总 作者: 字体:[增加 减小] 类型:转载 时间:2011-01-19我要评论 找了个时间看了下EasyUI插件,对它的插件感觉是很舒服,特地把Easy UI的大 ...

  6. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(5)-EF增删改查by糟糕的代码 上一讲我们创建了一系列的解决方案,我们通过一个例子来看看层与层之间的关系 ...

  7. AlphaDict 软件公布

    今天 Release 了 1.1. 主要是移植到了 window 平台, 无须安装,直接执行. 对 UI 又一次进行了设计,应该比之前好看多了. 加入了 生词本 功能,方便 学习外语. ------- ...

  8. thinkphp 统计某个字段不重复数 总数

    $this->batch->count('DISTINCT intobatch');

  9. Java多线程,哲学家就餐问题

    问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条.哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭.上述问题会产生死锁的情况,当5个哲学家都拿起自己右手 ...

  10. SQL Server未找到或无法訪问server问题解决

    问题信息:"在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法訪问服务器.请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接. (pr ...