91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

1)設(shè)計幾個不同的哈希函數(shù),比較他們的地址沖突率(可以用更大的名字集合做實驗)。 (2)研究這30個人名的特點,努力找一個哈希函數(shù),使得對于不同的拼音名一定不發(fā)生地址沖突。 (3)在哈希函數(shù)確定的前提下嘗試各種不同處理沖突的方法,考察平均查找長度的變化和造好的哈希表中關(guān)鍵字的聚集性。

資源截圖

代碼片段和文件信息

#include
#include//time用到的頭文件
#include//隨機數(shù)srand用到的頭文件
#include//toascii()用到的頭文件
#include//查找姓名時比較字符串用的頭文件
#define?HASH_LEN?50//哈希表的長度
#define?P?43//小于哈希表長度的P
#define?NAME_LEN?30//姓名表的長度
int?d[30]?i?j;
typedef?struct
{
char?name[20];
int??m;
}NAME;
typedef?struct
{
char?name[20];
int?m;
int?si;
}HASH;
NAME?Name[HASH_LEN];
HASH?Hash[HASH_LEN];
void?InitName()
{??printf(“請輸入姓名\n“);?
???for(i=0;i<30;i++){?
???printf(“請輸入第%d位姓名:“i+1);
???gets(Name[i].name);?
}?

for(i=0;i int?s=0;
for(int?j=0;j<20;j++)//將字符串的各個字符所對應(yīng)的ASCII碼相加,所得的整數(shù)做為哈希表的關(guān)鍵字
{??
s=s+toascii(Name[i].name[j]);?
}
Name[i].m=s;}
}
void?CreatHash()
{
?for(i=0;i???????{
??????????????Hash[i].name[20]=NULL;
??????????????Hash[i].m?=0;
??????????????Hash[i].si=0;
???????}
????for(i=0;i???????{
??????????????int?sum=1j=0t;
??????????????int?adr=(Name[i].m)%P;??//除留余數(shù)法H(key)=key%P,除數(shù)為P=43
??????????????if(Hash[adr].si==0)?????//如果不沖突,將姓名表賦值給哈希表
??????????????{
?????????????????????Hash[adr].m?=Name[i].m;
?????????????????????strcpy(Hash[adr].nameName[i].name);
?????????????????????Hash[adr].si=1;
??????????????}
??????????????else?????????????????????????//如果沖突
??????????????{
??????????????????t=adr;????????//線性探測法處理沖突
?????????????????for(;Hash[adr].si!=0&&adr?????????????????????{
????????????????????????????sum=sum+1;//每次查找,查找次數(shù)+1
????????????????????????????if(adr==HASH_LEN-1)//如果找到最后一個仍然沒有位置
????????????????????????????{
????????????????????????????????for(;Hash[adr].si!=0&&adr?????????????????????????????????sum=sum+1;//每次查找,查找次數(shù)+1
?????????????????????????????????if(adr==t)?printf(“哈希表已滿\n“);//如果找到上次的位置仍然沒有,則輸出哈希表已滿
????????????????????????????}
?????????????????????}
?????????????????????Hash[adr].m?=Name[i].m;??//將姓名表復(fù)制給哈希表對應(yīng)的位置上
?????????????????????strcpy(Hash[adr].nameName[i].name);
?????????????????????Hash[adr].si=sum;
??????????????}
???????}
}
void?DisplayName()//顯示姓名表
{
???????printf(“\n地址?\t\t?姓名?\t\t?關(guān)鍵字\n“);
???????for?(i=0;i???????printf(“%2d?%18s?\t\t??%d??\n“iName[i].nameName[i].m);
}
void?DisplayHash()//?顯示哈希表
{
???????float?asl=0.0;
???????printf(“\n\n?地址?\t\t?姓名?\t\t?關(guān)鍵字?\t?搜索長度\n“);?//顯示的格式
???????for?(i=0;i???????{
??????????????printf(“%2d?%1

評論

共有 條評論