数据结构实验____查找与排序.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验____查找与排序

数据结构实验六 查找与排序 一、实验目的: 1、掌握快速排序基本方法和过程; 2、 掌握哈希表查找的基本方法和过程,包括建立哈希表,解决冲突和查找元素; 3、 通过查找与排序的实验,能够举一反三,掌握查找与排序的知识与操作。 二、实验要求: 1、采用开放地址法中的二次探测在散列解决冲突; 2、编写程序对学习成绩进行排序。 三、实验内容及分析: 1、开放地址法中的二次探测在散列。 假设哈希表空间为T(0…M),哈希函数为H(Ki)。MOD表示求模运算。 二次探测再解散列解决冲突求“下一个”地址公式: d1=H(Ki) d2j=(d1+j^2) MOD M d2j+1=(d1-j^2) MOD j=1,2,3… 2、学习成绩排序 问题描述:在M个班的学生参加某门课程的考试,没办最多有N个学生,请输出学生生在班级的排名表。 基本要求: (1)每个班的学生记录是按学号顺序排列,每个学生记录至少包括排列名次、学号、姓名、成绩四个域; (2)输出每个学生在班级的排名,具有相同成绩的排名相同; 测试数据 假定有7个班,每班学生人数在10~15人之间;学号为“班级号+学生在本班级名册中的序号”,班次依次为1、2···7,成绩由计算机随即产生一个50~100之间的整数。 模块划分 (1)函数gen_recs():随即产生测试数据; (2)函数sort_one_class():对一个班的学生按成绩排序 (3)函数sort_sll():对全体学生按成绩排名; (4)函数print_list():输出排名表。 四、程序代码 哈希表查找程序代码 #includestdio.h #define MAX 100 int ha[MAX],hlen[MAX],n,m,p; void creathash() { int i,j,d,d1,odd,s,key[MAX]; printf(=====建立散列表=====\n); printf(输入元素个数n:); scanf(%d,n); printf(输入哈希表长m:); scanf(%d,m); printf(散列函数:h(k)=k MOD p:); scanf(%d,p); for(i=0;im;i++) ha[i]=hlen[i]=0; i=0; while(in) { printf(第%d个元素:,i+1); scanf(%d,key[i]); odd=1; if (key[i]=0) printf(输入错误,重新输入 !\n); else i++; } i=0; printf(哈希表建立如下:\n); while(in) { odd=1; d=d1=key[i]%p; j=s=1; printf(H(%d)=%d MOD %d=%d,key[i],key[i],p,d); while(ha[d]!=0) { printf(冲突\n); if (odd) { d=(d1+j*j)%m; printf(H(%d)=(%d+%d*%d) MOD %d=%d,key[i],d1,j,j,m,d); odd=0; } else { d=(d1-j*j)%m; printf(H(%d)=(%d+%d*%d) MOD%d=%d,key[i],d1,j,j,m,d); odd=1; j++; } s++; } printf(比较%d次\n,s); ha[d]=key[i]; hlen[d]=s; i++; } } void disphash() { int i,s=0; printf(\n散列表H为:\n); for (i=0;im;i++) printf(%3d,i); printf(\n); for (i=0;im;i++) printf(%3d,ha[i]); printf(\n); for (i=0;im;i++) printf(%3d,hlen[i]); printf(\n); for (i=0;im;i++) s=s+hlen[i]; printf(\tASL()%d=%6.2f\n,n,(1.0*s)/n); } void findhash() { int x,j,d,d1,odd=1; printf(\n输入查找的值:); scanf(%d,x); d=d1=x%p; j=1; while (ha[d]!=0h

文档评论(0)

2017ll + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档