xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 5KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-10
  • 語言: C/C++
  • 標簽: 哈希表??

資源簡介

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

資源截圖

代碼片段和文件信息

#include
#include//time用到的頭文件
#include//隨機數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++)//將字符串的各個字符所對應的ASCII碼相加,所得的整數做為哈希表的關鍵字
{??
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;??//除留余數法H(key)=key%P,除數為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;//每次查找,查找次數+1
????????????????????????????if(adr==HASH_LEN-1)//如果找到最后一個仍然沒有位置
????????????????????????????{
????????????????????????????????for(;Hash[adr].si!=0&&adr?????????????????????????????????sum=sum+1;//每次查找,查找次數+1
?????????????????????????????????if(adr==t)?printf(“哈希表已滿\n“);//如果找到上次的位置仍然沒有,則輸出哈希表已滿
????????????????????????????}
?????????????????????}
?????????????????????Hash[adr].m?=Name[i].m;??//將姓名表復制給哈希表對應的位置上
?????????????????????strcpy(Hash[adr].nameName[i].name);
?????????????????????Hash[adr].si=sum;
??????????????}
???????}
}
void?DisplayName()//顯示姓名表
{
???????printf(“\n地址?\t\t?姓名?\t\t?關鍵字\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?關鍵字?\t?搜索長度\n“);?//顯示的格式
???????for?(i=0;i???????{
??????????????printf(“%2d?%1

評論

共有 條評論