数据结构项目七课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构项目七课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 项目 课件
- 资源描述:
-
1、数据结构数据结构项目七共分为四个任务项目七共分为四个任务项目七项目七 查找查找任务一任务一 查找的相关术语查找的相关术语 任务二任务二 静态查找表静态查找表 任务三任务三 动态查找表动态查找表 任务四任务四 哈希查找哈希查找 任务一任务一 查找的相关术语查找的相关术语 1查找表查找表 2关键字关键字 3查找查找 4平均查找长度平均查找长度 1查找表查找表 查找表查找表(Search Table)是按某种数据结构形式存储的同一类型数)是按某种数据结构形式存储的同一类型数据元素(或记录)的集合。据元素(或记录)的集合。静态查找表:静态查找表:只能进行查找操作,而不能改变查找表中的原始数据。只能进行
2、查找操作,而不能改变查找表中的原始数据。动态查找表:动态查找表:除能查找数据元素之外,还能向表中插入新的数据元素除能查找数据元素之外,还能向表中插入新的数据元素或从表中删除已有的数据元素。或从表中删除已有的数据元素。2关键字关键字 关键字关键字(Key)是数据元素(或记录)中某个数据项的值,用它可)是数据元素(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)。以标识一个数据元素(或记录)。能惟一地确定一个记录的关键字称为能惟一地确定一个记录的关键字称为主关键字主关键字(Primary Key)。)。不能惟一地确定一个记录的关键字称为不能惟一地确定一个记录的关键字称为次关键字次关键字
3、(Secondary Key)。)。3查找查找 查找查找(Searching)是指根据给定的值,在查找表中确定一个其关键)是指根据给定的值,在查找表中确定一个其关键字与之相等的数据元素(或记录)。字与之相等的数据元素(或记录)。若找到相应的数据元素,则称若找到相应的数据元素,则称查找成功查找成功;否则称;否则称查找失败查找失败。4平均查找长度平均查找长度 平均查找长度平均查找长度(Average Search Length,简称,简称ASL)是指为确定)是指为确定某一数据元素在查找表中的位置,需与给定值进行比较的关键字个数某一数据元素在查找表中的位置,需与给定值进行比较的关键字个数的期望值。的
4、期望值。对于含有对于含有n个数据元素的查找表,查找成功时的平均查找长度为个数据元素的查找表,查找成功时的平均查找长度为 Pi为表中第为表中第i个数据元素的查找概率;个数据元素的查找概率;Ci为找到第为找到第i个数据元素时,所需进行的关键字比较的次数。个数据元素时,所需进行的关键字比较的次数。任务二任务二 静态查找表静态查找表 一、顺序查找一、顺序查找 二、折半查找二、折半查找 三、索引顺序查找三、索引顺序查找 静态查找表的顺序存储结构:静态查找表的顺序存储结构:#define MAXSIZE 100/顺序表的最大长度顺序表的最大长度typedef struct KeyType key;/关键字
5、项关键字项OtherType otheritem;/另外的数据项另外的数据项RecordType;typedef structRecordType elemMAXSIZE+1;/定义数据元素数组,定义数据元素数组,elem0为哨兵单元为哨兵单元int length;/顺序表长度顺序表长度SeqList;一、顺序查找一、顺序查找 1算法描述算法描述 2性能分析性能分析 1算法描述算法描述 基本思想:基本思想:从表中最后一个数据元素开始,自后向前将关键字逐个与从表中最后一个数据元素开始,自后向前将关键字逐个与给定值进行比较。若相等,则查找成功,给出所查数据元素在查找表给定值进行比较。若相等,则查找
6、成功,给出所查数据元素在查找表中的位置;否则,查找失败。中的位置;否则,查找失败。int SeqSearch(SeqList L,KeyType key)/在顺序表在顺序表L中顺序查找关键字等于中顺序查找关键字等于key的数据元素,若找到,返回的数据元素,若找到,返回值为该元素在表中的位置,否则为值为该元素在表中的位置,否则为0int i;L.elem0.key=key;/0号单元存放监测值,用于监测是否查询完整个表号单元存放监测值,用于监测是否查询完整个表for(i=L.length;L.ri.key!=key);i-);/自后向前进行关键字的比较自后向前进行关键字的比较return i;算
7、法描述算法描述如下:如下:2性能分析性能分析 对于具有对于具有n个数据元素的查找表,在查找第个数据元素的查找表,在查找第i个数据元素个数据元素elemi时,需进时,需进行行ni1次比较,即次比较,即Cini1,则顺序查找的平均查找长度为,则顺序查找的平均查找长度为 ASLPn2Pn-1(n1)P2nP1假设每个记录的查找概率相等,即假设每个记录的查找概率相等,即 则在等概率情况下,查找成功时的平均查找长度为则在等概率情况下,查找成功时的平均查找长度为 顺序查找适用面广,但平均查找长度较大时,查找效率相对较低。顺序查找适用面广,但平均查找长度较大时,查找效率相对较低。二、折半查找二、折半查找 1
8、算法描述算法描述 2性能分析性能分析 1算法描述算法描述 基本思想:基本思想:在关键字升序排列的顺序表中,将处于查找表中间位置的数在关键字升序排列的顺序表中,将处于查找表中间位置的数据元素的关键字与给定值进行比较,若二者相等,则查找成功;若中间据元素的关键字与给定值进行比较,若二者相等,则查找成功;若中间元素的关键字大于给定值,说明要查找的元素在表的前半部分,则在表元素的关键字大于给定值,说明要查找的元素在表的前半部分,则在表的前半部分继续查找;若中间元素的关键字小于给定值,说明要查找的的前半部分继续查找;若中间元素的关键字小于给定值,说明要查找的元素在表的后半部分,则在表的后半部分继续查找。
9、反复进行比较,直元素在表的后半部分,则在表的后半部分继续查找。反复进行比较,直至找到与给定值相等的数据元素(即查找成功)或者当前查找范围内无至找到与给定值相等的数据元素(即查找成功)或者当前查找范围内无数据元素(即查找不成功)。数据元素(即查找不成功)。基本步骤如下:基本步骤如下:确定查找区间的中点位置确定查找区间的中点位置 若若keyelemmid.key,则查找成功;,则查找成功;若若keyelemmid.key,则,则highmid1;若若keyelemmid.key,则,则lowmid1。将位于将位于mid位置处的数据元素的关键字与给定值位置处的数据元素的关键字与给定值key进行比较:
10、进行比较:重复以上步骤,直至查找成功或重复以上步骤,直至查找成功或lowhigh(查找失败)。(查找失败)。折半查找的算法:折半查找的算法:int BinSearch(SeqList L,KeyType key)/在顺序表在顺序表L中折半查找关键字等于中折半查找关键字等于key的数据元素,若找到,返回值为该的数据元素,若找到,返回值为该元素在表中的位置,否则为元素在表中的位置,否则为0int low,high,mid;low=1;high=L.length;/设置初始查找区间设置初始查找区间while(low key)high=mid-1;/查找区间为表的前半部分查找区间为表的前半部分else
11、 low=mid+1;/查找区间为表的后半部分查找区间为表的后半部分return 0;/查找不成功,返回查找不成功,返回02性能分析性能分析 有序表有序表L 3,7,12,30,34,45,49,52,63,71,77,86,94折半查找的过程可以用一个二叉树来描述,树中的一个结点表示查找表折半查找的过程可以用一个二叉树来描述,树中的一个结点表示查找表中的一个数据元素,结点中的值为数据元素在表中的位置。中的一个数据元素,结点中的值为数据元素在表中的位置。根结点对应当前查找根结点对应当前查找区间的中间元素,左区间的中间元素,左子树对应表的前半部子树对应表的前半部分,右子树对应表的分,右子树对应表
12、的后半部分。后半部分。查找某一数据元素的过程,可以看成是查找某一数据元素的过程,可以看成是从判定树的根结点到该数据元素对从判定树的根结点到该数据元素对应结点的一条路径应结点的一条路径,该结点在树中的层次数即为关键字比较的次数。折半,该结点在树中的层次数即为关键字比较的次数。折半查找在查找成功时关键字比较的次数至多为查找在查找成功时关键字比较的次数至多为 。假设查找表的长度为假设查找表的长度为n2h1,那么,判定树必为高度是,那么,判定树必为高度是hlog2(n1)的满二叉树。假设表中每个数据元素的查找概率相等,即的满二叉树。假设表中每个数据元素的查找概率相等,即1/n,则查找,则查找成功时的平
13、均查找长度:成功时的平均查找长度:折半查找折半查找平均性能好平均性能好,适用于适用于不经常变动而查找频繁的不经常变动而查找频繁的有序表有序表。三、索引顺序查找三、索引顺序查找 1算法描述算法描述 2性能分析性能分析 1算法描述算法描述 基本思想:基本思想:首先将查找表划分成若干个等长的块(子表),其中最后一首先将查找表划分成若干个等长的块(子表),其中最后一块可以不满。划分时要保证数据元素的关键字在块可以不满。划分时要保证数据元素的关键字在块与块之间是有序的块与块之间是有序的,而块内元素可以任意排列。然后,为每个块建立一个索引项,它包括而块内元素可以任意排列。然后,为每个块建立一个索引项,它包
14、括关关键字项键字项和和指针项指针项两部分,分别记录每块中的最大关键字和每块的起始位两部分,分别记录每块中的最大关键字和每块的起始位置。将所有块的索引项按关键字有序排列,从而构造了一个索引表。置。将所有块的索引项按关键字有序排列,从而构造了一个索引表。第第i i(1 1inin)块中所有数据元素的关键字均)块中所有数据元素的关键字均大于第大于第i i1 1块中所有数据元素的关键字块中所有数据元素的关键字索引顺序索引顺序查找的过程查找的过程:首先,将要查找的数据元素与索引表中的关键:首先,将要查找的数据元素与索引表中的关键字项进行比较,以确定待查数据元素所在的块,然后在相应的块中进字项进行比较,以
15、确定待查数据元素所在的块,然后在相应的块中进行查找。行查找。由于索引表是按关键字有序排列的顺序表,故可以采用由于索引表是按关键字有序排列的顺序表,故可以采用顺序查找或折顺序查找或折半查找法确定半查找法确定数据元素所在的数据元素所在的块块;而块中元素不要求按关键字有序,;而块中元素不要求按关键字有序,故进行故进行块内块内查找时要根据实际情况确定查找方法,查找时要根据实际情况确定查找方法,一般采用顺序查找一般采用顺序查找法法。若用若用折半查找法确定折半查找法确定待查元素待查元素所在块所在块,则平均查找长度为,则平均查找长度为 2性能分析性能分析 索引顺序查找是由索引表查找和子表顺序查找两部分完成的
16、,即索引顺序查找是由索引表查找和子表顺序查找两部分完成的,即ASL(索引顺序查找索引顺序查找)ASL(索引表查找索引表查找)ASL(顺序查找顺序查找)。若将含有若将含有n个数据元素的查找表均匀地分成个数据元素的查找表均匀地分成m块,每块中均含有块,每块中均含有s个数个数据元素,则有据元素,则有sn/m。假设每个数据元素的查找概率是相同的,索引。假设每个数据元素的查找概率是相同的,索引表中块的查找概率为表中块的查找概率为1/m,块中元素的查找概率为,块中元素的查找概率为1/s。若用若用顺序查找法确定顺序查找法确定待查元素待查元素所在块所在块,则平均查找长度为,则平均查找长度为 任务三任务三 动态
17、查找表动态查找表 一、二叉排序树一、二叉排序树 二、平衡二叉树二、平衡二叉树 基于动态查找表的查找又称基于树的查基于动态查找表的查找又称基于树的查找,其特点是表的结构在查找过程中动找,其特点是表的结构在查找过程中动态生成,查找表被组织成特定的树形结态生成,查找表被组织成特定的树形结构,并在树结构上实现查找。构,并在树结构上实现查找。一、二叉排序树一、二叉排序树 1二叉排序树的定义二叉排序树的定义 2二叉排序树的插入二叉排序树的插入 3二叉排序树的生成二叉排序树的生成 4二叉排序树的删除二叉排序树的删除 5二叉排序树的查找二叉排序树的查找 1二叉排序树的定义二叉排序树的定义 二叉排序树(二叉排序
18、树(Binary Sort Tree)又称二叉查找树,它是一种特殊结构)又称二叉查找树,它是一种特殊结构的二叉树。一棵非空的二叉排序树应具有下列性质:的二叉树。一棵非空的二叉排序树应具有下列性质:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;它的左右子树也分别为二叉排序树。它的左右子树也分别为二叉排序树。中序遍历一棵二叉排序树可中序遍历一棵二叉排序树可以得到一个递增有序序列。以得到一个递增有序序列。2二叉排序树
19、的插入二叉排序树的插入 插入过程为:插入过程为:若二叉排序树是空树,则若二叉排序树是空树,则key成为二叉排序树的根。成为二叉排序树的根。若二叉排序树非空,则将若二叉排序树非空,则将key与二叉排序树的根进行比较:与二叉排序树的根进行比较:如果如果key的值等于根结点的值,则停止插入;的值等于根结点的值,则停止插入;如果如果key的值小于根结点的值,则将的值小于根结点的值,则将key插入其左子树;插入其左子树;如果如果key的值大于根结点的值,则将的值大于根结点的值,则将key插入其右子树。插入其右子树。重复以上过程,直到结点重复以上过程,直到结点s插入到二叉排序树中的相应位置。插入到二叉排序
20、树中的相应位置。3二叉排序树的生成二叉排序树的生成 将二叉排序树初始化为一棵空树,逐个读取查找表中的每个数据元素,将二叉排序树初始化为一棵空树,逐个读取查找表中的每个数据元素,每个数据元素生成一个新结点,并将其插入到当前已生成的二叉排序树每个数据元素生成一个新结点,并将其插入到当前已生成的二叉排序树中,直到所有结点都插入完成。中,直到所有结点都插入完成。按照关键字序列按照关键字序列43,80,71,13,60,99,26,11,48,32的输的输入顺序创建一棵二叉排序树的过程:入顺序创建一棵二叉排序树的过程:输入顺序不同,所创建的二输入顺序不同,所创建的二叉排序树的形态也不同。叉排序树的形态也
21、不同。4二叉排序树的删除二叉排序树的删除 首先查找要删除的结点是否在树中,首先查找要删除的结点是否在树中,若不在若不在,则不执行任何操作;,则不执行任何操作;若在若在,假设要删除的结点为假设要删除的结点为p,其双亲结点为,其双亲结点为f,若结点,若结点p是是f的左孩子(的左孩子(p是是f的的右孩子的情况与之类似,这里不再详述),则有以下右孩子的情况与之类似,这里不再详述),则有以下3种情况:种情况:当结点当结点p为叶子结点时,直接删除该结点即可,即将其双亲结点的为叶子结点时,直接删除该结点即可,即将其双亲结点的左指针置空,同时释放结点左指针置空,同时释放结点p,对应的语句为:,对应的语句为:f
22、-lchild=NULL;free(p);当结点当结点p只有左子树或只有右子树时,可以将只有左子树或只有右子树时,可以将p的左子树或右子树直的左子树或右子树直接改为其双亲结点接改为其双亲结点f的左子树,对应的语句为:的左子树,对应的语句为:f-lchild=p-lchild;(或(或f-lchild=p-rchild;)free(p);当结点当结点p既有左子树,又有右子树时,删除的方法就会较为复杂。中既有左子树,又有右子树时,删除的方法就会较为复杂。中序遍历整个二叉排序树,得到一个按关键字有序排列的序列。在删除结序遍历整个二叉排序树,得到一个按关键字有序排列的序列。在删除结点点p后,应保持其他
23、元素在该序列中的相对位置不变。后,应保持其他元素在该序列中的相对位置不变。方法一方法一:令:令p的左子树为的左子树为f的左子树,而的左子树,而p的右子树为的右子树为s的右子树。的右子树。方法二方法二:用结点:用结点s的值代替结点的值代替结点p的值,然后将的值,然后将s删除。删除。5二叉排序树的查找二叉排序树的查找 若二叉排序树为空树,则查找失败。若二叉排序树为空树,则查找失败。若二叉排序树非空,将给定值若二叉排序树非空,将给定值key与根结点的关键字进行比较:与根结点的关键字进行比较:当当key等于根结点关键字时,则查找成功;等于根结点关键字时,则查找成功;当当key小于根结点关键字时,在其左
24、子树上继续查找;小于根结点关键字时,在其左子树上继续查找;当当key大于根结点关键字时,在其右子树上继续查找。大于根结点关键字时,在其右子树上继续查找。重复以上过程,直到查找成功或者要查找的子树为空(查找失败)。重复以上过程,直到查找成功或者要查找的子树为空(查找失败)。二叉排序树的查找操作的算法描述如下:二叉排序树的查找操作的算法描述如下:BSTree BSTSearch(BSTree BT,KeyType key)/在根为在根为BT的二叉排序树中查找关键字等于的二叉排序树中查找关键字等于key的数据元素,若查的数据元素,若查找成功,返回指向该结点的指针,否则返回空找成功,返回指向该结点的指
展开阅读全文