数据结构6(4月28日)课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构6(4月28日)课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 28 课件
- 资源描述:
-
1、查找:查找:根据给定的关键字值,在一组数据根据给定的关键字值,在一组数据值等于给定值的数据元素的过程。若存在这样的数据元素,值等于给定值的数据元素的过程。若存在这样的数据元素,则称查找成功;若不存在这样的数据元素,则称查找失败。则称查找成功;若不存在这样的数据元素,则称查找失败。关键字关键字:指数据元素中可以标识该数据元素的一组数据项。例如学指数据元素中可以标识该数据元素的一组数据项。例如学生记录中的学号;公民记录中的身份证号码等。生记录中的学号;公民记录中的身份证号码等。查找表:查找表:指一组待查数据元素的集合。它具有一定存储结构,如顺指一组待查数据元素的集合。它具有一定存储结构,如顺序表结
2、构、链式结构、树形结构等。序表结构、链式结构、树形结构等。2.6 2.6 查找查找 1)1)查找的方法查找的方法 查找某个数据元素依赖于查找表中数据元素的组织方式。按照查找某个数据元素依赖于查找表中数据元素的组织方式。按照数据元素的组织方式决定采用某种查找方法;反之数据元素的组织方式决定采用某种查找方法;反之,为了提高查找为了提高查找方法的效率,又要求数据元素采用某些特殊的组织方式。因此,在方法的效率,又要求数据元素采用某些特殊的组织方式。因此,在研究各种查找方法时,必须弄清各种查找方法所适用的组织方式。研究各种查找方法时,必须弄清各种查找方法所适用的组织方式。2)2)查找算法的评价查找算法的
3、评价 衡量一个算法的标准主要有两个:时间复杂度和空间复杂度。衡量一个算法的标准主要有两个:时间复杂度和空间复杂度。而在查找算法中,基本运算是给定值与关键字值的比较,即算法的而在查找算法中,基本运算是给定值与关键字值的比较,即算法的主要时间是花费在主要时间是花费在“比较比较”上的,所以,用上的,所以,用平均查找长度平均查找长度作为评价作为评价查查找算法好坏的依据。找算法好坏的依据。对于含有对于含有n n个数据元素的查找表,查找成功的平均查找长度为个数据元素的查找表,查找成功的平均查找长度为niiiCP1ASL=其中:其中:P Pi i为查找第为查找第i i个数据元素的概率;个数据元素的概率;C
4、Ci i为查找到第为查找到第i i个数个数据元素时,需进行的比较次数。据元素时,需进行的比较次数。*查找方法分类查找方法分类线性查找法线性查找法 顺序查找法顺序查找法 对半查找法对半查找法 分块查找法分块查找法基于树的查找法基于树的查找法 二叉排序树二叉排序树 B B树树 计算式查找法计算式查找法哈希法哈希法顺序存储的查找方法顺序存储的查找方法链式存储的查找方法链式存储的查找方法散列存储的查找方法散列存储的查找方法2.6.12.6.1 顺序查找法顺序查找法 基本思想是:从数组的第一个元素开始,与查找的关键字基本思想是:从数组的第一个元素开始,与查找的关键字逐个比对,直到找到关键字所在的位置或遇
5、到数组的结尾逐个比对,直到找到关键字所在的位置或遇到数组的结尾为止,若找到,则返回关键字在数组中的位置,否则返回为止,若找到,则返回关键字在数组中的位置,否则返回-1(1(因为因为C#C#的数组下标不可能为的数组下标不可能为-1)-1)。public int search(int keyValue)int i=0;while()i+;if()return(i);else return(-1);假设每个元素等概假设每个元素等概率查找率查找,则平均查则平均查找次数为找次数为(n+1)/2(n+1)/2ilength&datai!=keyValueiamidkamid,则取表的后半部分作为新表再去查
6、找。则取表的后半部分作为新表再去查找。(3 3)若若kamidkamid,则取表的前半部分作为新表再进行查找。则取表的前半部分作为新表再进行查找。这个过程一直进行到查找成功或子表的长度这个过程一直进行到查找成功或子表的长度为为0 0为止。为止。对半查找是基于关键字比较的最优方法。对半查找是基于关键字比较的最优方法。public int binSearch(int keyValue)int low,high,mid;low=0;high=length-1;while()mid=(low+high)/2;if(datamid=keyValue);else if(datamid keyValue);
7、else ;return(-1);low=highreturn(mid)low=mid+1high=mid-1对半查找成功时比较对半查找成功时比较次数最多为次数最多为loglog2 2n+1n+1*分块查找分块查找(索引顺序查找)索引顺序查找)“分块有序分块有序”表特点:表特点:(1)(1)表中数据分块表中数据分块 (2)(2)块中块中数据不必有序数据不必有序 (3)(3)块间块间有序有序“分块有序分块有序”表的结构有两部分:表的结构有两部分:(1)(1)顺序存储结构的线性表顺序存储结构的线性表 (2)(2)索引表(由每块的最大元素组成)索引表(由每块的最大元素组成)分块查找过程:分块查找过程
8、:(1)(1)用对半查找法查找索引表,确定待查项用对半查找法查找索引表,确定待查项x x 所在的块。所在的块。(2)(2)在相应的块中用顺序查找法查找待查项在相应的块中用顺序查找法查找待查项x x。2.6.3 2.6.3 二叉排序树及查找二叉排序树及查找 若线性表中的结点经常插入和删除,就应设计成把链表和二若线性表中的结点经常插入和删除,就应设计成把链表和二分法结合的查找方法。分法结合的查找方法。二叉排序树是将线形表中的元素组织成二叉树的形式,以达二叉排序树是将线形表中的元素组织成二叉树的形式,以达到与对半查找相同的查找效率。到与对半查找相同的查找效率。1 1、二叉排序树定义:、二叉排序树定义
9、:(1 1)若它的左子树不空,则左子树上所有的关键字均小于它若它的左子树不空,则左子树上所有的关键字均小于它 的的根结点的关键字;根结点的关键字;(2 2)若它的右子树不空,则右子树上所有的关键字均大于或若它的右子树不空,则右子树上所有的关键字均大于或 等等于它的根结点的关键字;于它的根结点的关键字;(3 3)它的左、右子树也是二叉排序树。它的左、右子树也是二叉排序树。如果按中序遍历二叉排序树,可得到一个递增排列的序列。如果按中序遍历二叉排序树,可得到一个递增排列的序列。526481937中序遍历序列:中序遍历序列:1 1、2 2、3 3、4 4、5 5、6 6、7 7、8 8、9 9二叉排序
10、树示例:二叉排序树示例:/TreeNode/TreeNode类类public class TreeNodepublic class TreeNode public char data;public char data;public TreeNode leftChild public TreeNode leftChild;public TreeNode rightChild public TreeNode rightChild;public TreeNode(char public TreeNode(char c)c)data=c;data=c;leftChild leftChild=null;
11、=null;rightChild rightChild=null;=null;/BiTree/BiTree类类public class BiTreepublic class BiTree private TreeNode private TreeNode root;root;public BiTree public BiTree()()root=null;root=null;public void insBTree(char public void insBTree(char k)k)/二叉排序树创建二叉排序树创建 public TreeNode banSearch(charpublic Tr
12、eeNode banSearch(char k)k)/二叉排序查找方法二叉排序查找方法 二叉排序树代码表示:二叉排序树代码表示:2 2、查找算法及实现、查找算法及实现 在给定的二叉排序树在给定的二叉排序树t t中查找给定待查关键字中查找给定待查关键字k k:从根结点出发从根结点出发 (1 1)如果树)如果树t t为空,那么查找失败。算法结束;否则,转(为空,那么查找失败。算法结束;否则,转(2 2)(2 2)如果)如果t.datat.data等于等于k k,则查找成功。算法结束。否则转(,则查找成功。算法结束。否则转(3 3)(3 3)如果)如果kt.datak k);else ;return
13、(p);(p!=null)&(p.data!=k)p=p.leftChildp=p.rightChild 假设一组数据元素的关键字序列如下:假设一组数据元素的关键字序列如下:4545,2424,5353,1212,3737,9393,3030,4040,80 80 分析查找元素分析查找元素4040 452453123795803040P1P2P3P4如何创建二叉排序树?如何创建二叉排序树?3 3、创建二叉排序树创建二叉排序树 通过在初始为空的树中不断插入数通过在初始为空的树中不断插入数k k来建立二叉排序树,步骤:来建立二叉排序树,步骤:(1 1)若二叉排序树为空,则插入结点应为根结点)若二叉
14、排序树为空,则插入结点应为根结点 (2 2)若二叉排序树非空,根据关键字比较的结果确定是在左)若二叉排序树非空,根据关键字比较的结果确定是在左子树还是在右子树中继续查找插入位置,直至某个结点的子树还是在右子树中继续查找插入位置,直至某个结点的左子树或右子树空为止,则插入结点应为该结点的左孩子左子树或右子树空为止,则插入结点应为该结点的左孩子或右孩子。或右孩子。假定由整数序列假定由整数序列1010,6 6,1919,2222,8 8,22生成一棵二叉排生成一棵二叉排序树,可以采用逐个元素插入的方法实现。序树,可以采用逐个元素插入的方法实现。(1)(1)首先将首先将1010作为根结点作为根结点(2
15、)(2)然后插入然后插入6 6时,通过比较知时,通过比较知610610,所以将,所以将6 6作为作为1010的的 左孩子插入;左孩子插入;(3)(3)同理将同理将1919作为作为1010的右孩子插入;的右孩子插入;(4)(4)整数整数2222通过和通过和1010、1919比较后,作为比较后,作为1919的右孩子插入。的右孩子插入。(5)(5)依次插入剩余的其他元素依次插入剩余的其他元素 public void insBTree(char k)/将将k k插入到二叉排序树插入到二叉排序树 TreeNode p,q;q=new TreeNode(k);if(root=null)/树为空,该节点即根
16、节点树为空,该节点即根节点 root=q;return;p=root;/从根开始从根开始开始找位置开始找位置 while(p.leftChild!=q)&(p.rightChild!=q)/尚未插入新节点尚未插入新节点 if(k 1N1,则执行第,则执行第1 1步,否则结束排序步,否则结束排序 初始状态初始状态 45 21 34 19 52 60 34 2445 21 34 19 52 60 34 24 第第1 1趟(趟(i=1i=1)1919 21 34 45 52 60 21 34 45 52 60 3434 24 24 第第2 2趟(趟(i=2i=2)1919 2121 34 45 52
17、 60 34 45 52 60 3434 24 24 第第3 3趟(趟(i=3i=3)1919 21 2421 24 45 52 60 45 52 60 3434 34 34 第第4 4趟(趟(i=4i=4)1919 21 24 21 24 3434 52 60 45 34 52 60 45 34 第第5 5趟(趟(i=5i=5)1919 21 24 21 24 34 34 3434 60 45 52 60 45 52 第第6 6趟(趟(i=6i=6)1919 21 24 21 24 34 34 3434 45 45 60 52 60 52 第第7 7趟(趟(i=7i=7)1919 21 24
18、 21 24 34 34 3434 45 52 45 52 60 60可见,可见,选择排序是一种不稳定的排序选择排序是一种不稳定的排序。具体算法描述如下具体算法描述如下:public void selectSort()int i,j,k;for(i=0;i length-1;i+);for(j=i+1;j n;j+)if()k=j;/记录最小元素的位置记录最小元素的位置 if()int x=datai;datai=datak;datak=x;k=idataj datakk!=i2.6.2 2.6.2 交换排序交换排序1 1、冒泡排序、冒泡排序 将待排序文件中的记录两两比较,若为逆序,则进行交换
展开阅读全文