#include<stdio.h>
#include<conio.h>
#define HASH_LEN 50 //哈希表的长度
#define M 47 //随机数
#define NAME_NO 15 //人名的个数
typedef struct
{
char *py; //名字的拼音
int k; //拼音所对应的整数
}NAME;
NAME NameList[HASH_LEN]; //全局变量NAME
typedef struct //哈希表
{
char *py; //名字的拼音
int k; //拼音所对应的整数
int si; //查找长度
}HASH;
HASH HashList[HASH_LEN]; //全局变量HASH
void InitNameList() //姓名(结构体数组)初始化
{
char *f;
int r,s0,i;
NameList[0].py="liangxin";
NameList[1].py="huayongpan";
NameList[2].py="liufeng";
NameList[3].py="dingxiao";
NameList[4].py="gaoyunchuan";
NameList[5].py="liqingbo";
NameList[6].py="liujunpeng";
NameList[7].py="jiangquanlei";
NameList[8].py="xingzhengchuan";
NameList[9].py="luzhaoqian";
NameList[10].py="gaowenhu";
NameList[11].py="zhuhaoyin";
NameList[12].py="chenli";
NameList[13].py="wuyunyun";
NameList[14].py="huangjuanxia";
NameList[15].py="wangying";
for (i=0;i<NAME_NO;i++)
{
s0=0;
f=NameList[i].py;
for (r=0;*(f+r)!='\0';r++)
/* 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/
s0=*(f+r)+s0;
NameList[i].k=s0;
}
}
void CreateHashList() //建立哈希表
{
int i;
for (i=0; i<HASH_LEN;i++)
{
HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for (i=0;i<HASH_LEN;i++)
{
int sum=0;
int adr=(NameList[i].k)%M; //哈希函数
int d=adr;
if(HashList[adr].si==0) //如果不冲突
{
HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else //冲突
{
do
{
d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突
sum=sum+1; //查找次数加1
}
while (HashList[d].k!=0);
HashList[d].k=NameList[i].k;
HashList[d].py=NameList[i].py;
HashList[d].si=sum+1;
}
}
}
void FindList() //查找
{
char name[20]={0};
int s0=0,r,sum=1,adr,d;
printf("\n请输入姓名的拼音:");
scanf("%s",name);
for (r=0;r<20;r++) //求出姓名的拼音所对应的整数(关键字)
s0+=name[r];
adr=s0%M; //使用哈希函数
d=adr;
if(HashList[adr].k==s0) //分3种情况进行判断
printf("\n姓名:%s 关键字:%d 查找长度为: 1",HashList[d].py,s0);
else if (HashList[adr].k==0)
printf("无此记录!");
else
{
int g=0;
do
{
d=(d+s0%10+1)%M; //伪随机探测再散列法处理冲突
sum=sum+1;
if (HashList[d].k==0)
{
printf("无此记录! ");
g=1;
}
if (HashList[d].k==s0)
{
printf("\n姓名:%s 关键字:%d 查找长度为:%d",HashList[d].py,s0,sum);
g=1;
}
}while(g==0);
}
}
void Display() // 显示哈希表
{
int i;
float average=0;
printf("\n\n地址\t关键字\t\t搜索长度 \t姓名\n"); //显示的格式
for(i=0; i<50; i++)
{
printf("%d ",i);
printf("\t%d ",HashList[i].k);
printf("\t\t%d ",HashList[i].si);
printf("\t\t %s ",HashList[i].py);
printf("\n");
}
for (i=0;i<HASH_LEN;i++)
average+=HashList[i].si;
average/=NAME_NO;
printf("\n\n平均查找长度:ASL(%d)=%f \n\n",NAME_NO,average);
}
void haxi()
{
char ch1;
printf("\n 哈希表生成及哈希查找算法\n");
printf(" **********************************梁鑫20082557******************************\n");
printf(" \n");
printf(" 1. 显示创建的哈希表 \n");
printf(" 2. 哈希表的查找 \n");
printf(" 3. 退出 \n");
printf(" \n");
InitNameList();
CreateHashList ();
while(1)
{
printf("\n请输入您的选择:");
fflush(stdin);
ch1=getchar();
if (ch1=='1')
Display();
else if (ch1=='2')
FindList();
else if (ch1=='3')
return;
else
{
printf("\n请输入正确的选择!");
}
}
}
void hash()
{
haxi();
}
没有合适的资源?快使用搜索试试~ 我知道了~
suanfa.rar_Dijkstra radix_KMP算法演示_希尔排序
共17个文件
c:12个
cpp:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 56 浏览量
2022-09-14
18:12:08
上传
评论
收藏 20KB RAR 举报
温馨提示
数据结构基本算法演示程序实现: 1、实现KMP模式匹配算法、哈夫曼编码算法、由遍历序列恢复二叉树、Prim算法、Kruskal算法、Floyd算法、Dijkstra算法、拓扑排序、关键路径算法、二叉排序树生成算法(含平衡化)、哈希表生成及哈希查找算法、希尔排序、快速排序、堆排序、归并排序、基数排序。(四则表达式计算、矩阵运算、有向图的强连通分量求解) 2、算法中的链表结构和数组结构的基本操作要求单独函数实现(同组内算法要求共享使用)。 要求数据结构基本算法演示程序具有菜单选择,算法要有结果的显示形式,显示程序框架
资源推荐
资源详情
资源评论
收起资源包目录
suanfa.rar (17个子文件)
hfm.c 4KB
dui.c 3KB
erchapaixushu.cpp 4KB
floyd.c 3KB
hash.c 4KB
kmp.c 2KB
quicksort.c 2KB
prim.cpp 4KB
guibing.c 2KB
main.cpp 2KB
jishupaixu15.c 4KB
biaodashiqiuzhi.c 3KB
kruskal.cpp 4KB
Dijkstra7.c 3KB
xierpaixu11.c 2KB
erchashu3.c 3KB
guanjianlujing.cpp 5KB
共 17 条
- 1
资源评论
JonSco
- 粉丝: 90
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功