查找实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验报告 姓 院(系  课程名称: 专业/年级: 实验四  ——查找 一、实验目的 掌握次序表的查找方法,尤其是折半查找方法; 掌握二叉排序树的查找算法。 二、实验预习内容 请在上机前仔细阅读教材及实验指导书,并在以下空白处填写相应的内容。 请写出简单次序查找算法。 intseq_search(elementtypeA[],intn,keytypex) { i=n;A[0].key=x; while(A[i].key=x)i--; returni; } 请写出有序表二分(折半)查找算法。 (1)非递归算法 intbin_search(elementtypeA[],intn,keytypex) {intmid,low=0,high=n-1;//初始化查找地区 while(low=high) {mid=(low+high)/2; 精品文库 if(x==A[mid].keyreturnmid; elseif(xA[mid.key])high=mid-1; elselow=mid+1; } return-1;//返回查找失败的标志 } (2)递归算法 intbin_search(elementtypeA[],intlow,inthigh,keytypex) {intmid; if(lowhigh)return-1;//查找失败 else{mid=(low+high)/2;//求解中间元素的下标 if(x==A[mid].key)returnmid;//查找成功 elseif(xA[mid].key) returnbin_search(A,low,mid-1,x);//将在左边地区查找的结果作为在整个地区的查找结果返回 elsereturnbin_search(A,mid+1,high,x);//将在右边地区查找的结果作为在整个地区的查找结 果返回 } } 2 精品文库 二叉排序树查找算法: 1)请写出二叉排序树结点的结构体定义语句。 typedefchardatatype; typedefstructnode {keytypekey;datatypedata; structnode*lchild,*rchild; }BSTnode; 2)请写出二叉排序树中插入结点的算法。 voidinsert(Bnode*T,Bnode*S)//将指针S所指结点插入到二叉排序树T中 { if(T==NULL) T=S;//插入到空树时,插入结点成为根结点 elseif(S-keyT-key) insert(T-lchild,S);//插入到T的左子树中 elseinsert(T-rchild,S);//插入到T的右子树中 } 3)请写出二叉排序树结构的算法。 voidcreate_bst(Bnode*T);//经过插入结点结构二叉排序树的算法 {Bnode*u;elementtypex; T=NULL;cinx;//初始化根指针并读入第一个元素值 3 精品文库 While(x!=end_of_num)//x不是结束符时 {u=newBnode;u-data=x;//产生新结点并装入数据 u-lchild=NILL;u-rchild=NULL;//设置左、右孩子指针为空 insert(T,u);//插入结点到二叉排序树T中 cinx;//读入下一个元素的值 } } 4)请写出二叉排序树查找的算法。 非递归算法: Bnode*bst_search(Bnode*T,keytypex) { Bnode*P=T;//P指向根 while(p!=NULL) if(x==p-key)returnp;//查找成功 elseif(xp-key=p-lchild);//到左子树中持续查找 elsep=p-rchild;//到右子树中持续查找 returnp;//返回结果可能为空,也可能非空 } 4 精品文库 递归算法: Bnode*bst_search(Bnode*T,keytypex) { if(T==NULL||t-key=x) returnT;//子树为空或已经找到时均可结束 elseif(xT-key) returnbst_search(T-lchild,x);//左子树中查找的结果就是函数的结果 elsereturnbst_search(T-rchild,x);//右子树中查找的结果就是函数的结果 } 三、上机实验 实验内容。 1)成立一个次序表,用次序查找的方法对其实施查找; 2)成立一个有序表,用折半查找的方法对其实施查找; 3)成立一个二叉排序树,根据给定值对其实施查找; 4)对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能剖析。 实验源程序。 (1) #includestdio.h #includestdlib.h #definemax

文档评论(0)

182****7876 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档