ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:222.87KB ,
资源ID:26829300      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26829300.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构实验散列表.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构实验散列表.docx

1、数据结构实验散列表 计算机科学与技术系哈希表的设计与实现项目报告 专业名称 计算机科学与技术 项目课程 数据结构与算法 项目名称 哈希表的设计与实现 班 级 项目人员 钱海峰,郑秀娟,王传敏,杨青,凌波 实验日期 2015.12.9 目录一设计目的3二问题分析3三设计环境3四人员分配3五详细设计和编码4六实验分析71测试分析72性能分析11附录12参考书目17一设计目的(1)掌握散列结构和散列函数的相关概念(2)掌握散列结构的存储结构的相关概念(2)掌握散列冲突的处理方法(3)运用散列解决冲突问题。二问题分析要完成如下要求:设计哈希表实现整数查询系统。实现本项目需要解决以下问题:(1)如何设计

2、一个哈希表。(2)如何在哈希表中插入记录。(3)如何删除哈希表中的记录。(4)如何查找并显示记录。(5)如何解决冲突问题。三设计环境 硬件:计算机每人一台。 软件:Windows操作系统和Microsoft Visual VC+6.0编译器。四人员分配负责人负责内容钱海峰showHashTable() , menu()郑秀娟insert(),search()王传敏Sanlibiao.h , main.c , 项目文档杨 青Hash(),createHashTable()凌 波dele() , initHashTable()五详细设计和编码1.定义结点结构类型在链地址法中,每个结点对应一个链表结

3、点,由3个域组成,结构如图9-1所示。其中,key为关键字域,存放结点关键字;data为数据域,存放结点数据信息;next为链域,存放指向下一个同义词结点的指针。Keydatanext图9-1 链地址法结点结构链地址数据结构类型如下:#define MAX_LENGTH 50typedef struct node int data; struct node *next;ElemNode;typedef struct ElemNode *first;ElemHeader,HashTableMAX_LENGTH;#include 2.对哈希函数的定义设计一个Hash()函数,本设计中对散列函数选择

4、的是除留余数法,即对关键字进行模运算,将运算结果所得的余数作为关键字(或结点)的存储地址,即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+) hti.first= NULL; 4.创建哈希表在整个设计中,创建哈希表必须是第一步要做的,结点之

5、前应先输入结点的个数,利用链地址法解决冲突。添加结点实际是调用了插入结点函数insert(),需要利用哈希函数计算出地址,其次将结点插入以关键字为地址的链表后。建立结点应包括动态申请内存空间,想地址中输入信息,同时最后一个结点中的next指针等于NULL。具体实现如下:int createHashTable(HashTable ht) HashTable *p=ht; int adMAX_LENGTH=0; int i; printf(请输入插入个数n:); scanf(%d,&n); printf(n请输入插入%d个整数:,n); for(i=0;in;i+) scanf(%d,&adi);

6、 initHashTable(p,n); for(i=0;idata = ele; p-next = hti.first; hti.first = p;6.散列链表查找结点算法在散列链表中查找一个结点,其算法分为以下几步:(1) 根据待查找关键字计算散列地址;(2) 在散列地址所指向的单链表中顺序查找待查找关键字;(3) 如果找到待查关键字,则返回指向该结点的指针;否则返回NULL。散列链表中查找结点的算法如下:ElemNode* search(HashTable ht,int ele) int i; ElemNode *p; i = Hash(ele); p=hti.first; while

7、(p!=NULL & p-data != ele) p = p-next; if(p!=NULL) printf(数据%d的位置为%dn,ele,i); return p; else printf(哈希表中无%dn,ele); return p; 7.散列链表删除结点算法在散列表中删除一个结点,其算法分为两步:(1) 查找要删除的结点;(2) 如果找到则删除,否则显示提示信息。在散列表中删除一个结点的算法如下:void dele(HashTable ht,int ele)/删除指定数据 int i; ElemNode *p,*q; i = Hash(ele); p=hti.first; if(

8、p = NULL) printf(error occurred! ); if(p-data = ele) hti.first = p-next; else q= p-next; while(q!=NULL & q-data != ele) p=q; q = q-next; if(q = NULL) printf(error occurred! ); else p-next = q-next; free(q); 六实验分析1.测试分析(1)建立哈希表(2)插入一个结点并显示:(3) 查找结点:在哈希表中没有3这个数,会输出一行提示信息。(4) 删除一个结点并显示:2.性能分析散列法本质上是一种通

9、过关键字直接计算存储地址的方法。在理想情况下,散列函数可以把结点均匀地分布在散列表中,不发生冲突,则查找过程无需比较,其时间复杂度O(1)。但在实际使用过程中,为了将范围广泛的关键字映射到一组连续的存储空间,往往会发生同义词冲突,这时就需要进行关键字比较。 能够把关键字尽可能均匀地分布到散列表中的函数是“好”的散列函数。好的散列函数可以有效地降低冲突的的发生,从而提高查找性能。但好的散列函数和关键字的数字特征有关,因此不存在对任何结点都好的散列函数。 对于同一种散列函数,采用不同的冲突处理方法将产生不同的效果,例如线性探测法容易导致“二次聚集”,而拉链法可以从根本上杜绝二次聚集,从而提高查找性

10、能。不过也会“浪费”一部分散列表的空间。附录*程序源代码*/头文件sanlibiao.h#include #include #define MAX_LENGTH 50typedef struct node int data; struct node *next;ElemNode;typedef struct ElemNode *first;ElemHeader,HashTableMAX_LENGTH;int n;/存储哈希表长度void initHashTable(HashTable ht,int n);void insert(HashTable ht,int ele);ElemNode* s

11、earch(HashTable ht,int ele);void dele(HashTable ht,int ele);int Hash(int ht);int createHashTable(HashTable ht);void showHashTable(HashTable ht);void menu(HashTable ht);/菜单/功能函数 sanlibiao.c#includesanlibiao.hvoid initHashTable(HashTable ht,int n)/初始化 int i; for(i =0;ikey = ele; p-data = ele; p-next =

12、 hti.first; hti.first = p;ElemNode* search(HashTable ht,int ele)/查找 int i; ElemNode *p; i = Hash(ele); p=hti.first; while(p!=NULL & p-data != ele) p = p-next; if(p!=NULL) printf(数据%d的位置为%dn,ele,i); return p; else printf(哈希表中无%dn,ele); return p; void dele(HashTable ht,int ele)/删除指定数据 int i; ElemNode

13、*p,*q; i = Hash(ele); p=hti.first; if(p = NULL) printf(error occurred! ); if(p-data = ele) hti.first = p-next; else q= p-next; while(q!=NULL & q-data != ele) p=q; q = q-next; if(q = NULL) printf(error occurred! ); else p-next = q-next; free(q); int Hash(int ht)/哈希函数 int i; i = ht%n; return i;int cre

14、ateHashTable(HashTable ht)/创建哈希表 HashTable *p=ht; int adMAX_LENGTH=0; int i; printf(请输入插入个数n:); scanf(%d,&n); printf(n请输入插入%d个整数:,n); for(i=0;in;i+) scanf(%d,&adi); initHashTable(p,n); for(i=0;in;i+) insert(p,adi); return 1;void showHashTable(HashTable ht)/显示哈希表 int i; ElemNode *p; /i = Hash(ele); f

15、or(i=0;idata); p = p-next; if(hti.first!=NULL)printf(n); void menu(HashTable ht) int p,h; /p 菜单选择; do / system(cls);/清屏 printf(n); printf( n); printf(* 欢迎来到哈希表系统! *n); printf( 合肥学院 n); printf( 计算机科学与技术 n); printf( 钱海峰,郑秀娟,王传敏,杨青,凌波 n); printf( n); printf( n); printf( 菜 单 n); printf( n); printf( n);

16、printf(* (1)-创建哈希表 *n); printf(* (2)-查找 *n); printf(* (3)-删除 *n); printf(* (4)-插入 *n); printf(* (5)-输出哈希表 *n); printf(* (0)-退出 *n); printf(*n); printf(n); printf(n请在上述序号中选择一个并输入: ); scanf(%d,&p); switch(p) case 1:createHashTable(ht);break; case 2:printf(请输入要查找的数:n);scanf(%d,&h);search(ht,h);break; c

17、ase 3:printf(请输入要删除的数:n);scanf(%d,&h);dele(ht,h);printf(n);break; case 4:printf(请输入要插入的数:n);scanf(%d,&h);insert(ht,h);printf(n);break; case 5:showHashTable(ht);printf(n);break; case 0: break; /退出 default:printf(输入错误!请重新输入!n);break; /system(pause);/系统暂停,提示按任意键继续。 while(p!=0); /for do /主函数 mian.c#include sanlibiao.hint main() HashTable ht; menu(ht);/进入菜单循环 return 0;参考书目王昆仑,李红,数据结构与算法,中国铁道出版社,2007年6月第一版。谭浩强,C语言程序设计,北京:清华大学出版社,2005年7月第三版。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1