第十五周——【项目2 - 用哈希法组织关键字】
2015-12-07 16:36
573 查看
/*
* Copyright (c) 2015, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp,btree.h,btree.cpp
* 作者:于奎民
* 完成日期:2015年11月5日
* 版本号:code ::Block 12.11
* 问题描述:
已知一个关键字序列为if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,共15个字符串,哈希函数H(key)为关键字的第一个字母在字母表中的序号,哈希表的表长为26。
(1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出哈希表,并求成功情况下的平均查找长度。
(2)若处理冲突的方法采用链地址法,请设计算法,输出哈希表,并计算成功情况和不成功情况下的平均查找长度。
*/
测试文件:
(1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出哈希表,并求成功情况下的平均查找长度。
结果:
* Copyright (c) 2015, 烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp,btree.h,btree.cpp
* 作者:于奎民
* 完成日期:2015年11月5日
* 版本号:code ::Block 12.11
* 问题描述:
已知一个关键字序列为if、while、for、case、do、break、else、struct、union、int、double、float、char、long、bool,共15个字符串,哈希函数H(key)为关键字的第一个字母在字母表中的序号,哈希表的表长为26。
(1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出哈希表,并求成功情况下的平均查找长度。
(2)若处理冲突的方法采用链地址法,请设计算法,输出哈希表,并计算成功情况和不成功情况下的平均查找长度。
*/
测试文件:
(1)若处理冲突的方法采用线性探测法,请设计算法,输出每个关键字对应的H(key),输出哈希表,并求成功情况下的平均查找长度。
<p>#include <stdio.h> #include <string.h> #define N 15 #define M 26 int H(char *s) { return ((*s-'a'+1)%M); }</p><p>int main() { char *s = {"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; }
结果:
相关文章推荐
- solr schema.xml配置详解
- 第十二周 项目一 图基本算法库
- SharePoint 2013 BI--Power Query for SharePoint
- 第十五周 项目2 插入排序之直接插入排序
- 17岁和27岁的自己
- [免费在线培训]RAD Studio 第 4 季培训课程-系列二
- android动画及用法
- fedora19之后的版本安装mysql
- du 命令 -查看磁盘空间大小
- 第15周项目2用哈希表组织关键字
- 第十五周项目2-用哈希法组建关键字
- 【Linux编程】IO复用之epoll详解
- 第15周、项目2.2—用哈希法组织关键字
- Swift Up and Running——使用Tuple打包类型
- [BZOJ1800] [Ahoi2009]fly 飞行棋
- CSS制作简单的纵向菜单
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- (网赚手赚必备)安卓一键修改手机信息imei、mac、imsi、serial、手机型号等等
- Free download VVDI PROG 4.1.2
- 【转。摘】五个测试人员必须具有的优点