- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验散列表
计算机科学与技术系
哈希表的设计与实现项目报告
专业名称 计算机科学与技术
项目课程 数据结构与算法
项目名称 哈希表的设计与实现
班 级
项目人员 钱海峰,郑秀娟,王传敏,杨青,凌波
实验日期 2015.12.9
目录
一.设计目的…………………………………………………………3
二.问题分析…………………………………………………………3
三.设计环境…………………………………………………………3
四.人员分配…………………………………………………………3
五.详细设计和编码…………………………………………………4
六.实验分析…………………………………………………………7
1测试分析……………………………………………………7
2性能分析……………………………………………………11
附录……………………………………………………………………12
参考书目………………………………………………………………17
一.设计目的
(1)掌握散列结构和散列函数的相关概念
(2)掌握散列结构的存储结构的相关概念
(2)掌握散列冲突的处理方法
(3)运用散列解决冲突问题。
二.问题分析
要完成如下要求:设计哈希表实现整数查询系统。
实现本项目需要解决以下问题:
(1)如何设计一个哈希表。
(2)如何在哈希表中插入记录。
(3)如何删除哈希表中的记录。
(4)如何查找并显示记录。
(5)如何解决冲突问题。
三.设计环境
⒈ 硬件:计算机每人一台。
⒉ 软件:Windows操作系统和Microsoft Visual VC++6.0编译器。
四.人员分配
负责人 负责内容 钱海峰 showHashTable() , menu() 郑秀娟 insert(),search() 王传敏 Sanlibiao.h , main.c , 项目文档 杨 青 Hash(),createHashTable() 凌 波 dele() , initHashTable()
五.详细设计和编码
1.定义结点结构类型
在链地址法中,每个结点对应一个链表结点,由3个域组成,结构如图9-1所示。其中,key为关键字域,存放结点关键字;data为数据域,存放结点数据信息;next为链域,存放指向下一个同义词结点的指针。
Key data next 图9-1 链地址法结点结构
链地址数据结构类型如下:
#define MAX_LENGTH 50
typedef struct node{
int data;
struct node *next;
}ElemNode;
typedef struct{
ElemNode *first;
}ElemHeader,HashTable[MAX_LENGTH];#include stdio.h
2.对哈希函数的定义
设计一个Hash()函数,本设计中对散列函数选择的是除留余数法,即对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,即i=ht mod n,本设计n由用户自己输入,然后将计算出来的结果返回。具体设计如下:
int Hash(int ht)
{ int i;
i = ht%n;
return i;
}
3.初始化散列链表
初始化链地址散列算法只需要把散列表中所有表头结点的指针域置为NULL。
初始化散列链表的算法如下:
void initHashTable(HashTable ht,int n)
{
int i;
for(i =0;in;i++){ ht[i].first= NULL; }
}
4.创建哈希表
在整个设计中,创建哈希表必须是第一步要做的,结点之前应先输入结点的个数,利用链地址法解决冲突。添加结点实际是调用了插入结点函数insert(),需要利用哈希函数计算出地址,其次将结点插入以关键字为地址的链表后。建立结点应包括动态申请内存空间,想地址中输入信息,同时最后一个结点中的next指针等于NULL。具体实现如下:
int createHashTable(HashTable ht)
{
HashTable *p=ht;
int ad[MAX_LENGTH]={0};
int i;
printf(请输入插入个数n:);
sc
原创力文档


文档评论(0)