联系hashgameCONTACT hashgame
地址:广东省广州市
手机:13988889999
电话:020-88889999
邮箱:admin@qq.com
查看更多
Rhashgamehashgame
你的位置: 首页 > hashgame

HASH GAME - Online Skill Game ET 300数据结构作业哈希表设计doc

发布时间:2025-05-29 13:36:32  点击量:

  HASH GAME - Online Skill Game GET 300

HASH GAME - Online Skill Game GET 300数据结构作业哈希表设计doc

  四、哈希表设计 需求分析 针对某个集体(比如你所在班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 设计 (1)设计思想 本程序中人名以顺序表为存储结构,查找以哈希表为存储结构。 算法思想:本程序中将人名以顺序表存储,将人名的拼音形式的单个字符用toascii函数取得ASCII码后相加得到的和值作为人名的关键字,然后将其存入哈希表中进行查找。哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。 (2)概要设计 人名的存储结构体Chartable包含了一个存储人名的字符数组Ascii和一个DataType类型的k,DataType中包含keytype类型的key和一个int类型的R,R的作用是存储发生哈希冲突时伪随机函数产生的随机值,用于查找该值在哈希表中的位置,R的初始值为0。 toascii()函数包含在ctype.h头文件中,用于将字符转化为ASCII码。 rand()函数包含在stdlib.h头文件中,用于在哈希冲突时产生伪随机数值。 由于采用的是伪随机探测再散列法处理冲突,则需要对书上的哈希表查找函数Find()和插入函数Insert()进行改造。 查找函数声明形式:int Find(HashTable *hash,DataType x,int *R); 插入函数声明形式:int Insert(HashTable *hash,DataType x,int *R); (3)详细设计 本程序将30个人名存储在Chartable[30]数组中,并使用toascii函数将人名各字符的ASCII值的和存储在key值中,初始化哈希表,因为关键字的个数为30,则根据哈希表长度=(1.1~1.7倍关键字个数之间的素数)取哈希表长度为43,将各个关键字一次插入哈希表,然后在依次查找其在哈希表中的位置。 在哈希表的查找函数中,由于使用的伪随机探测再散列法处理冲突。则需要加入一个R值来存储rand()函数产生的随机值,以便在查找中使用。在查找中需利用R值进行判断该元素是否存在以及是否与其他元素发生冲突。 (4)调试分析 这个程序花费的时间也比较多,主要是在处理随机值的问题上。由于采用伪随机探测再散列法处理冲突,则必须将产生的随机值存储起来才能对该元素进行查找,而如何判断该元素是否存在于哈希表中和是否与其他元素发生冲突也比较棘手。在设计程序的过程中经常发生指向的地址错误输出错误的数值的问题。后来经过一系列的分析与调试才彻底解决了这些问题。 不过我知道这个程序存在一个比较严重的漏洞,便是若两个人的人名的拼音的ASCII码值和完全相等,即出现“重名”的话,在插入时后一个人名就会被误认为哈希表中已经存在该人名从而出现插入错误。由于暂时还想不到更加合理的方法来解决这个问题,所以将这个问题遗留了下来,日后进行改进。 (5)用户手册 同样的,程序内部已经将30个人名的顺序表构建好,编译运行程序后即能输出最终结果

【返回列表页】

顶部

地址:广东省广州市  电话:020-88889999 手机:13988889999
Copyright © 2018-2025 哈希游戏(hash game)官方网站 版权所有 非商用版本 ICP备案编: