-
大小: 9KB文件類型: .cpp金幣: 1下載: 1 次發(fā)布日期: 2021-06-22
- 語言: C/C++
- 標簽: 數(shù)據(jù)結(jié)構(gòu)??
資源簡介
30個中國人姓名拼音,設計Hash表,平均查找長度不超過2,用除留余數(shù)法構(gòu)造,用線性探測再散列,二次探測再散列和鏈地址法處理沖突。完成建表和查表操作。本人的課程設計作業(yè)
代碼片段和文件信息
#include
#include
#include
#include
#define?HASH_LENGTH?50???????????????//哈希表的長度?????????
#define?M?47?????????????????????????//隨機數(shù)
#define?NAME_NO?30???????????????????//人名的個數(shù)????????
typedef?struct??????
{???char?*py;????//名字的拼音
????int?k;???????//拼音所對應的整數(shù)
}NAME;
NAME?NameList[HASH_LENGTH];????//全局變量NAME???????
typedef?struct????//哈希表
{???char?*py;???//名字的拼音
????int?k;??????//拼音所對應的整數(shù)
????int?si;?????//查找長度
}HASH;
HASH?HashList1[HASH_LENGTH]HashList2[HASH_LENGTH];????????//全局變量HASH
typedef?struct?node{
char?*py;
int??k;
int??si;
struct?node?*next;
}NODE*Nodeptr;
NODE?HashList3[HASH_LENGTH];
void?InitNameList()?//姓名(結(jié)構(gòu)體數(shù)組)初始化??????????
{???char?*f;
????int?rs0i;
????NameList[0].py=“chenhong“;
????NameList[1].py=“fanghuaxia“;
????NameList[2].py=“geyuhao“;
????NameList[3].py=“houjie“;
????NameList[4].py=“jinxiangcheng“;
????NameList[5].py=“l(fā)iuxiaozhen“;
????NameList[6].py=“panning“;
????NameList[7].py=“songjunrong“;
????NameList[8].py=“tangwenchao“;
????NameList[9].py=“wanglinna“;
????NameList[10].py=“xijianxin“;
????NameList[11].py=“yangpei“;
????NameList[12].py=“wujingqiu“;
????NameList[13].py=“zhoufanya“;
????NameList[14].py=“zhuyong“;
????NameList[15].py=“biyunpeng“;
????NameList[16].py=“hanfen“;
????NameList[17].py=“guojing“;
????NameList[18].py=“xiaorui“;
????NameList[19].py=“peiruoxuan“;
????NameList[20].py=“wenruiyan“;
????NameList[21].py=“l(fā)uxun“;?
????NameList[22].py=“jiangfang“;
????NameList[23].py=“fujunning“;
????NameList[24].py=“youyao“;
????NameList[25].py=“l(fā)inshu“;
????NameList[26].py=“majinlian“;
????NameList[27].py=“milaoshu“;
????NameList[28].py=“dengchao“;
????NameList[29].py=“sunshan“;
????for(i=0;i {???s0=0;
????????f=NameList[i].py;
????????for(r=0;*(f+r)!=‘\0‘;r++)?
/*?將字符串的各個字符所對應的ASCII碼相加,所得的整數(shù)做為哈希表的關(guān)鍵字*/
????????????s0=*(f+r)+s0;
????????NameList[i].k=s0;
}?
}
void?CreateHashList()?//建立哈希表???
{ int?i;
????for(i=0;?i {???HashList1[i].py=““;
????????HashList1[i].k=0;
????????HashList1[i].si=0;
HashList2[i].py=““;
????????HashList2[i].k=0;
????????HashList2[i].si=0;
HashList3[i].py=““;
????????HashList3[i].k=0;
????????HashList3[i].si=0;
HashList3[i].next=NULL;
}
????for(i=0;i {???int?sum=0;
????????int?adr=(NameList[i].k)%M;??//哈希函數(shù)
????????int?d=adr;
//表1--線形探測再散列法處理沖突
????????if(HashList1[adr].si==0)?????//如果不沖突
{??HashList1[adr].k=NameList[i].k;
???????????HashList1[adr].py=NameList[i].py;
???????????HashList1[adr].si=1;
???}
???????else???//沖突??
???{?do
??{???d=(d+1)%HASH_LENGTH;?????
??????????????sum=sum+1;????????????????????//查找次數(shù)加1????
??}while?(HashList1[d].k!=0);
?????????HashList1[d].k=NameList[i].k;
?????????HashList1[d].py=NameList[i].py;
?????????HashList1[d].si=sum+1;
???}
???d=adr;
???sum=0;
???//表2--二次探測再散列法處理沖突
???????if(HashList2[adr].si==0)?????//如果不沖突
{??HashList2[adr].k=Na
- 上一篇:C語言雙向鏈表基本操作
- 下一篇:MFC寫的畫圖板類似Windows自帶的畫圖
評論
共有 條評論