项目二——用哈希法组织关键字(1)
来源:互联网 发布:苹果开发必备软件 编辑:程序博客网 时间:2024/06/05 04:51
问题及代码:
/*2015,烟台大学计算机与控制工程学院 *作者:桑立*完成日期:2015年12月6日*问题描述:已知一个关键字序列为if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,共15个字符串,哈希函数H(key)为关键字的第一个字母在字母表中的序号,哈希表的表长为26。 (1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出哈希表,并求成功情况下的平均查找长度。*/
代码:
#include <stdio.h>#include <string.h>#define N 15#define M 26int H(char *s){ return ((*s-'a'+1)%M);}int main(){ char *s[N]= {"if", "while", "for", "case", "do", "break", "else", "struct", "union", "int", "double", "float", "char", "long", "bool"}; int i, j, k; char HT[M][10]; int Det[M]; //存放探测次数 for(i=0; i<M; i++) { HT[i][0]='\0'; Det[i]=0; } printf("字符串 key\tH(key)\n"); printf("------------------------\n"); for(i=0; i<N; i++) { j=H(s[i]); //求哈希值 printf("%s\t\t%d\n", s[i],j); k=0; //探测次数初值 while(1) { k++; //累加探测次数 if(HT[j][0]=='\0') //当不冲突时,直接放到该处 { strcpy(HT[j], s[i]); break; } else //冲突时,采用线性探查法求下一个地址 { j=(j+1)%M; } } Det[j]=k; } printf("---------------------\n"); printf("哈希表\n"); printf("位置\t字符串\t探查次数\n"); printf("---------------------\n"); for(i=0; i<M; i++) printf("%d\t%s\t%d\n", i, HT[i], Det[i]); printf("---------------------\n"); k=0; for(i=0; i<M; i++) k+=Det[i]; printf("查找成功情况下的平均查找长度 %f\n", 1.0*k/N); return 0;}
运行结果:
0 0
- 项目二——用哈希法组织关键字(1)
- 第十四周——项目二—用哈希法组织关键字
- 第十五周项目二——用哈希法组织关键字
- 第十五周 项目二(1) 用哈希法组织关键字
- 第十五周--项目二--用哈希法组织关键字(1)
- 第十五周项目二 (1)用哈希法组织关键字
- 第十五周 项目二(2) 用哈希法组织关键字
- 第十五周--项目二--用哈希法组织关键字(2)
- 第十五周项目二 (2)用哈希法组织关键字
- 第15周 项目二---用哈希法组织关键字(2)
- 第十五周(项目二)用哈希法组织关键字
- 第十五周项目二(用哈希法组织关键字)
- 第十五周项目二(用哈希法组织关键字)
- 第十五周项目二~~用哈希法组织关键字
- 第十五周项目二 用哈希法组织关键字
- 第十五周 项目二 用哈希法组织关键字
- 第十五周项目二:用哈希法组织关键字
- 第十五周 项目二 - 用哈希法组织关键字
- EM算法与高斯混合分布
- <黑马程序员> 第七篇:IO
- android单位sp,dp等的转化
- 6大设计原则(二)---里氏替换原则
- 机器学习python实战——决策树
- 项目二——用哈希法组织关键字(1)
- guava之Multiset、Multimap、BiMap与Table_成绩表行转列JAVA136-137
- SSH整合
- VS2015连接mySQL数据库
- 【软工文档】机房收费系统之软件需求说明书
- 比RBAC更好的权限认证方式(Auth类认证)
- 设计模式之设计原则
- 布局别名 屏幕方向限定符
- 静态链接库和动态链接库的区别