数据结构哈希表设计.docx
- 文档编号:12287197
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:9
- 大小:28.76KB
数据结构哈希表设计.docx
《数据结构哈希表设计.docx》由会员分享,可在线阅读,更多相关《数据结构哈希表设计.docx(9页珍藏版)》请在冰点文库上搜索。
数据结构哈希表设计
#include
#defineMaxSize100//定义最大哈希表长度
#defineNULLKEY-1//定义空关键字值
#defineDELKEY-2//定义被删关键字值
typedefintKeyType;//关键字类型
typedefchar*InfoType;//其他数据类型
typedefstruct
{
KeyTypekey;//关键字域
InfoTypedata;//其他数据域
intcount;//探查次数域
}HashTable[MaxSize];//哈希表类型
voidInsertHT(HashTableha,int&n,KeyTypek,intp);
voidCreateHT(HashTableha,KeyTypex[],intn,intm,intp);
intSearchHT(HashTableha,intp,KeyTypek);
intDeleteHT(HashTableha,intp,intk,int&n);
voidDispHT(HashTableha,intn,intm);
int*fun(int*k);
intchange(chary[10]);
voidmain()
{
intx[20]={0};
fun(x);
intn=20,m=30,p=29,i,k;
chark1[10];
HashTableha;
CreateHT(ha,x,n,m,p);
printf("\n");
DispHT(ha,n,m);
printf("请输入查找的姓名:
");
scanf("%s",&k1);
k=change(k1);
i=SearchHT(ha,p,k);
if(i!
=-1)
{
printf("找到%d\n",k);
printf("删除关键字\n");
DeleteHT(ha,p,k,n);
}
else
{
printf("未找到%d\n",k);
printf("插入关键字%d\n",k);
InsertHT(ha,n,k,p);
}
DispHT(ha,n,m);
printf("\n");
}//将关键字k插入到哈希表中
voidInsertHT(HashTableha,int&n,KeyTypek,intp)
{
inti,adr;
adr=k%p;
if(ha[adr].key==NULLKEY||ha[adr].key==DELKEY)
//x[j]可以直接放在哈希表中
{
ha[adr].key=k;
ha[adr].count=1;
}
else
//发生冲突时,采用线性探查法解决冲突
{
i=1;//i记录x[j]发生冲突的次数
do
{
adr=(adr+1)%p;
i++;
}
while
(ha[adr].key!
=NULLKEY&&ha[adr].key!
=DELKEY);
ha[adr].key=k;
ha[adr].count=i;
}
n++;
}//创建哈希表
voidCreateHT(HashTableha,KeyTypex[],intn,intm,intp)
{
inti,n1=0;
for(i=0;i { ha[i].key=NULLKEY; ha[i].count=0; } for(i=0;i InsertHT(ha,n1,x[i],p); }//在哈希表中查找关键字k intSearchHT(HashTableha,intp,KeyTypek) { inti=0,adr; adr=k%p; while(ha[adr].key! =NULLKEY&&ha[adr].key! =k) { i++;//采用线性探查法找下一个地址 adr=(adr+1)%p; } if(ha[adr].key==k)//查找成功 returnadr; else//查找失败 return-1; }//删除哈希表中关键字k intDeleteHT(HashTableha,intp,intk,int&n) { intadr; adr=SearchHT(ha,p,k); if(adr! =-1)//在哈希表中找到关键字 { ha[adr].key=DELKEY; n--;//哈希表长度减1 return1; } else//在哈希表中未找到该关键字 return0; }//输出哈希表 voidDispHT(HashTableha,intn,intm) { floatavg=0; inti; printf("哈希表地址: \t"); for(i=0;i printf("%3d",i); printf("\n"); printf("哈希表关键字: \t");for(i=0;i if(ha[i].key==NULLKEY||ha[i].key==DELKEY) printf("");//输出3个空格 else printf("%3d",ha[i].key);}int*fun(int*k) { intj,i; chary[20][10]={"ZeSan","LiSi","WaYun","DiZhu","YaYe","YuanMi","ChenChen","LiSu","WaKe","LiSa","SuDa","SuJi","JiaJia","GuGo","XieBe","XieSe","SuLi","SuLa","JiaKa","WuAi"}; for(j=0;j<20;j++) { for(i=0;i<10;i++) { switch(y[j][i]) { case'A': k[j]+=1;break; case'B': k[j]+=2;break; case'C': k[j]+=3;break; case'D': k[j]+=4;break; case'E': k[j]+=5;break; case'F': k[j]+=6;break; case'G': k[j]+=7;break; case'H': k[j]+=8;break; case'I': k[j]+=9;break; case'J': k[j]+=10;break; case'K': k[j]+=11;break; case'L': k[j]+=12;break; case'M': k[j]+=13;break; case'N': k[j]+=14;break; case'O': k[j]+=15;break; case'P': k[j]+=16;break; case'Q': k[j]+=17;break; case'R': k[j]+=18;break; case'S': k[j]+=19;break; case'T': k[j]+=20;break; case'U': k[j]+=21;break; case'V': k[j]+=22;break; case'W': k[j]+=23;break; case'X': k[j]+=24;break; case'Y': k[j]+=25;break; case'Z': k[j]+=26;break; default: k[j]+=0;break; } } } returnk; } intchange(chary[10]) { intj,k=0; for(j=0;j<10;j++) { switch(y[j]) { case'A': k+=1;break; case'B': k+=2;break; case'C': k+=3;break; case'D': k+=4;break; case'E': k+=5;break; case'F': k+=6;break; case'G': k+=7;break; case'H': k+=8;break; case'I': k+=9;break; case'J': k+=10;break; case'K': k+=11;break; case'L': k+=12;break; case'M': k+=13;break; case'N': k+=14;break; case'O': k+=15;break; case'P': k+=16;break; case'Q': k+=17;break; case'R': k+=18;break; case'S': k+=19;break; case'T': k+=20;break; case'U': k+=21;break; case'V': k+=22;break; case'W': k+=23;break; case'X': k+=24;break; case'Y': k+=25;break; case'Z': k+=26;break; default: k+=0;break; } } returnk; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 哈希表 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)