数据结构:哈希表设计(c++)
文章目录
- 一、实验题目
- 二、需求分析
- 三、概要设计
- 四、调试分析
- 五、使用说明
- 六、测试结果
- 七、其他数据结构实例
一、实验题目
根据数据结构知识,设计哈希表的相关内容
二、需求分析
[问题描述]
针对某个集体中人名设计一个哈希表,使得平均查找长度不超过 R,并完成相应的建表
和查表程序。
[基本要求]
假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有 30 个,取平均查找
长度的上限为 2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。
[测试数据]
取读者周围较熟悉的 30 个人名。
[选作内容]
(1)从教科书上介绍的集中哈希函数构造方法中选出适用者并设计几个不同的哈希函
数,比较他们的地址冲突率(可以用更大的名字集合作实验)。
(2)研究这 30 个人名的特点,努力找一个哈希函数,使得对于不同的拼音名一定不发
生地址冲突。
(3)在哈希函数确定的前提下尝试各种不同处理冲突的方法,考察平均查找长度的变
化和造好的哈希表中关键字的聚集性。
三、概要设计
代码如下
/*pmj 20191220*/
#include<iostream>
#include<malloc.h>
#include<string.h>
using namespace std;
#define geshu 50 //哈希表的长度
#define M 50
#define NAME_NO 30
typedef struct {char *name;int k; //拼音所对应的关键字
} Name;
typedef struct {char *name;int k; //拼音所对应的关键字
int len; //查找长度
} HASH;
Name ren[geshu];
HASH halt[geshu];
//main函数
int main() {char *z;int r, s0;float average = 0;for(int i=0; i<geshu; i++) {cin>>ren[i].name;}for (int i = 0; i < NAME_NO; i++) { //求整数s0 = 0;z = ren[i].name; //方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字for (r = 0; *(z + r) != '\0'; r++) //当字符为空时停止计算s0 = *(z + r) + s0;ren[i].k = s0; //利用循环将所有字符的ASCII码值相加} //最终的到的值就是ASCII码值和for (int i = 0; i < geshu; i++) { //哈希表的初始化halt[i].name = "";halt[i].k = 0;halt[i].len = 0;}for (int i = 0; i < NAME_NO; i++) {int sum = 0;int adr = (ren[i].k) % M; //利用除留余数法构造哈希函数int d = adr;if (halt[adr].len == 0) { //如果不冲突则存储到哈希表中halt[adr].k = ren[i].k;halt[adr].name = ren[i].name;halt[adr].len = 1;} else { //存在冲突do {d = (d + ((ren[i].k)) % 10 + 1) % M;sum = sum + 1; //查找次数加1} while (halt[d].k != 0);halt[d].k = ren[i].k;halt[d].name = ren[i].name; //数值存入哈希表halt[d].len = sum + 1; //接着查找下一个字符}}cout << "姓名为:" <<"\t" << "地址为:" << "\t" << "关键字为:" << "\t\t" << "搜索的长度为:" << "\t" << "H为:" << "\t\t"<< endl; //显示的格式for (int i = 0; i < 50; i++) {cout << halt[i].name<< i << "\t" << halt[i].k << "\t\t" << halt[i].len << "\t\t" << (halt[i].k) % M << "\t\t" << endl;} //依次输出for (int i = 0; i < geshu; i++)average += halt[i].len; //计算平均查找长度average /= NAME_NO;cout << "平均查找长度:ASL " << NAME_NO << "=" << average << endl;
}
四、调试分析
调试结果如图所示,无错误。
五、使用说明
第一步:在程序中输入30个人名
第二步:输出地址、关键字、探索长度、H、姓名
六、测试结果
七、其他数据结构实例
数据结构:编程带你了解约瑟夫环
数据结构:简易停车场管理系统
数据结构:哈夫曼编/译码设计
数据结构:图的基本操作模拟-校园导游
以上内容为个人学习总结,如有遗漏或者错误请在评论区中指正!!!
如果看完觉得有所收获的话,记得一键三连哦,谢谢大家!
数据结构:哈希表设计(c++)相关推荐
- 数据结构哈希表的实现与设计
数据结构哈希表查找姓名的课程设计 有没有大神能帮忙写一下这道题,课设的题目.用C++语言 问题描述:针对某公司中花名设计哈希表,并完成相应的建表和查表程序,基本要求: (1)假设花名为汉字拼音形式.名 ...
- 数据结构-----------------------哈希表(最通俗易懂的文章)
哈希表 简要 通俗来讲,哈希表是通过函数 (映射关系) 来直接寻找表中存储的关键字,哈希表也是一种数据结构,它是表结构的一种升级拓展,哈希就是一种函数映射,表是一种数据结构,那么合起来就叫哈希表 那么 ...
- 数据结构——哈希表的详解与实现
数据结构--哈希表(HashTable) 1.前言 当我们频繁的查找数据中的某个元素时,我们通常会选择数组来存放数据,因为数组的的内存是连续的,可以直接通过下标访问数据,但是它添加和删除数据比较麻 ...
- 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题
layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...
- java hashtable 数据结构_数据结构--哈希表(Java)
数据结构--哈希表(Java) 介绍 哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率 代码 package cn.guizimo.hashtab; ...
- Python中常用的数据结构---哈希表(字典)
Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...
- 【数据结构】人名查询哈希表设计(链地址法)
文章目录 核心代码 链表节点定义 链地址法处理冲突 查询函数 完整代码下载 核心代码 哈希表使用「链地址法」解决地址冲突的方式,其数据结构就采用 数组+链表 ,数组的每一个元素都是一个链表节点,当地址 ...
- 数据结构 - 哈希表(散列表)
一.概念 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快 ...
- 数据结构 — 哈希表
目录 文章目录 目录 哈希表 哈希表 哈希表,又称为散列表,是根据键值对(Key/Value)进行访问的数据结构,它让 Value 经过哈希函数的转换映射到哈希表对应的位置上,查找效率非常高.哈希索引 ...
- 哈希表数据结构_Java数据结构哈希表如何避免冲突
前言 一.哈希表是what? 这是百度上给出的回答: 简而言之,为什么要有这种数据结构呢? 因为我们想不经过任何比较,一次从表中得到想要搜索的元素.所以就构造出来了哈希表,通过某种函数(哈希函数)使元 ...
最新文章
- mongodb转json
- 在Angular单元测试代码的it方法里连续调用两次detectChange方法,会触发两次ngAfterViewInit吗
- 安卓APP_ 控件(5)—— ProgressBar
- python网络编程3-socketserver模块
- vba 数组赋值_VBA数组与字典解决方案第31讲:VBA数组声明及赋值后的回填方法
- 无痛苦的软件维护——文档和代码
- 我恨Safari!!!
- 服务器查看数据库日志文件,服务器数据库查看日志文件
- 用php上传mysql表文件_php实现上传文件并存储到mysql数据库
- 软件测试技术案例教程 李海生 cd 源码 source,软件测试技术案例教程
- TOT12-2技能培训 第一周
- appfuse mysql_Appfuse 使用
- 操作系统15----80386处理器基础
- baddy:核心函数入口
- 操作系统下spinlock锁解析、模拟及损耗分析
- 大赛征集令|首届“万应杯”低代码应用开发大赛报名开启啦!
- 安装EVE-NG模拟器
- DELAY_US()
- Excel VBA(04)数组和字典
- java 代码 二义性是什么_Java接口默认方法带来的问题分析【二义性问题】
热门文章
- jdbc mysql emoji 读取_mysql/Java服务端对emoji的支持
- 2020 智慧旅游系统总体设计方案
- 2007年考研数学一解析pdf
- 分享一个学习充电的电子书下载网站(目前可以免费下载电子书)
- 指定目录下创建TXT文件
- 奥维互动地图自建服务器,奥维中如何添加在线自定义地图
- 个人使用整理的部分测试数据整理-输入类2022
- RFC791:INTERNET PROTOCOL网络协议
- 总结了 110+ 公开专业数据集
- python cnn 股市_荐python3绘制股票K线图的那些坑【一】mpl_finance迁向mplfinance,以及plot独立窗口视图问题!...