据设计_查找实验1_2_07_.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线 性 表 的 查 找 在表的组织方式中,线性表是最简单的一种。对线性表的查找一般有三种方法:顺序查找、二分查找、分块查找。 一、顺序查找 基本知识:线性表的数据类型定义及对线性表的顺序扫描操作。 算法思想:从线性表一端开始,顺序扫描线性表,依次将扫描到的结点关健字与给定值key比较,若相等,则查找成功;若扫描结束后,仍末找到关健字等于key的结点,则查找失败。 二、二分查找 基本知识:线性表的数据类型定义、线性表中结点按其关健字有序排列。算法思想: ① 用待查值key与表的中间结点关健字比较(中间结点将线性表分为两个子表),若比较结果相等,则查找成功; 若待查值key大于中间结点关健字,选右子表继续比较; 若待查值key小于中间结点关健字,选左子表继续比较; ② 重复①,直到查找成功或结束; 三、分块查找 基本知识:分块查找是把线性表分成若干块,各块中的结点顺序可任意亦可有序,但块与块之间必须按关健字大小有序,即前一块中的最大关健字要小于后一块中的最小关健字。因此,与线性表的顺序查找和二分查找不同,除定义线性表的数据类型外,还须定义一个递增有序的索引表,以描述线性表“分块有序”的状态 算法思想:分块查找实际上是对索引表和线性表的两次查找。 顺序查找或二分查找索引表:以确定待查结点在哪一块。 由于索引表递增有序(即块与块之间按关健字大小有序),因此,索引表的查找常采用二分查找算法以提高算法效率。 在所确定的块内顺序查找线性表:确定待查结点在线性表的确切位置。 由于块内结点即可无序亦可有序,因此,块内查找一般采用顺序查找算法。 查找实验(两次课完成) 一、实验题目: 请编写一个完整的程序,用菜单驱动方法实现:利用分块查找算法在线性表(学生情况表)list中查找给定值key(学号)的结点,并将该结点的部分数据进行修改。 注:在此实验中你还可以添加一个或几个你最熟悉的查找算法来实现此功能。 二、解题思路: 例:输入学号:30207; 选择课程名:语文; 输入修改成绩:100; 在学生情况表中查找学号为“30207”的学生记录;将该学生记录的语文成绩修改为100; 建立文件算法:建立待查找的数据文件SCORE.TXT的函数creat( ) 输入算法: 在待查找的数据文件SCORE.TXT中找 输出算法: 将修改后的线性表(学生情况表)数据输出到文件SCORE.TXT中, 算法要点: 分块查找的查找过程分两步进行: ① 先在线性表中确定待查找的结点属于哪一块。由于块与块之间按关健字大小有序,因此,块间查找可采用二分查找算法。 ② 在所确定的块内查找待查结点,由于块内结点即可无序亦可有序,因此,块内查找一般可采用顺序查找算法。找到指定结点后,按要求修改结点中的有关数据。 三、数据类型及算法 1.数据类型定义 (1)学生的结点结构 typedef struct { char num[8],name[10]; //学生的学号,姓名 int age,chin,phy,chem,eng; //学生的年龄,中文、物理、化学和英语成绩 } STUDENT; (2)线性表的结点结构 typedef struct { keytype key[8]; //关键字 STUDENT stu; } TABLE; (3)索引表的结点结构 typedef struct { keytype key[8]; int low,high; } INDEX; 2.操作算法 (1).TXT文件中读出数据、建立线性表及索引表可通过调用函数readtxt(void)完成,此函数算法如下: void readtxt(void) // 构造线性表list及索引表inlist { FILE *fp; int i,d; char max[8]; fp=fopen(“score.txt”,”r”); //以只读方式打开SCORE.TXT文件 for(i=0;iM;i++) // 将SCORE.TXT中的M个数据输到线性表list中 { fscanf(fp,”%s”,list[i].stu.num);//从文件SCORE.TXT中输入第i个学生的学号 fscanf(fp,”%s”,list[i].stu.name); //从SCORE.TXT中输入第i个学生的姓名 fscanf(fp,”%d”,list[i].stu.chin); //从SCORE.TXT中输入第i生的中文成绩 fscanf(fp,”%d”,list[i].stu.phy); //从SCORE.TXT中输入第i生的物理成绩 f

文档评论(0)

wofu + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档