数据构造试验报告四一一哈希表查找名字(字符串)
试验题目:哈希表查找名字(字符串) 试验目标:
输入一组名字(至少 50 个),将其保存并利用哈希表查找。输出哈希查找冲突次数,哈希表 负载因子、查找命
中率。
数据构造:
哈希t Hashtable[]);
void InitHash(int Hashtable[]);
void InsertHash(int key,int Hashtable[]); int SearchHash(int key,int Hashtable[]); void PrintHash(int Hashtable[]);
int count=0,num=0; void main()
{
int i,key,collapsetime,searchtime,Hash[LENGTH]; float loadelem,hitprob;
char names[LENGTH][20];
InitHash(Hash);
printf(“input the number of names(number<=%d).\n“,LENGTH); scanf(“%d“,&num); printf(“input names.\n“); for(i=0;i<num;i++)
{
scanf(“%s“,&names[i]);
key=(abs((int)names[i][0]-(int)names[i][1]+(int)names[i][strlen(names[i])/2]-(int)names[i][str
len(names[i])-2]-(int)names[i][strlen(names[i])-1]))*strlen(names[i]);
/*上式为关键字求取,公式:关键字 key=abs (字符串首位 ASCII 码值-其次位 ASCII 码值+第([n/2]+1 )位 ASCII 码值-最终一位 ASCII 码值-倒数其次位 ASCII 码值)*字符串长度
( abs 为求整数确定值的函数) 。*/
InsertHash(key,Hash);
}
count=0;/* 将 count 置零,去除插入过程中产生的冲突次数 */ PrintHash(Hash);
{
for(i=0;i<num;i++)
key=(abs((int)names[i][0]-(int)names[i][1]+(int)names[i][strlen(names[i])/2]-(int)names[i][str
len(names[i])-2]-(int)names[i][strlen(names[i])-1]))*strlen(names[i]);
/* 上式为关键字求取,公式同上 */ SearchHash(key,Hash);
}
collapsetime=count; searchtime=count+num; loadelem=(float)num/LENGTH; hitprob=(float)num/searchtime; printf(“ 元素个数: %d\n“,num);
printf(“ 冲突次数: %d\n“,collapsetime); printf(“ 查
哈希表实验报告 来自淘豆网m.daumloan.com转载请标明出处.