欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数据结构实验散列表.docx

    • 资源ID:14400552       资源大小:222.87KB        全文页数:19页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构实验散列表.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月第三版。


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开