数据结构严蔚敏课件第9章
数据结构严蔚敏(全部章节814张)-(课件)
目前,计算机已深入到社会生活的各个领域,其应 用已不再仅仅局限于科学计算,而更多的是用于控制, 管理及数据处理等非数值计算领域。计算机是一门研究 用计算机进行信息表示和处理的科学。这里面涉及到两 个问题:信息的表示,信息的处理。
信息的表示和组织又直接关系到处理信息的程序的 效率。随着应用问题的不断复杂,导致信息量剧增与信 息范围的拓宽,使许多系统程序和应用程序的规模很大, 结构又相当复杂。因此,必须分析待处理问题中的对象 的特征及各对象之间存在的关系,这就是数据结构这门 课所要研究的问题。
计算机求解问题的一般步骤
编写解决实际问题的程序的一般过程:
– 如何用数据形式描述问题?—即由问题抽象出一个 适当的数学模型; – 问题所涉及的数据量大小及数据之间的关系; – 如何在计算机中存储数据及体现数据之间的关系? – 处理问题时需要对数据作何种运算? – 所编写的程序的性能是否良好? 上面所列举的问题基本上由数据结构这门课程来回答。
– 链式存储结构:在每一个数据元素中增加一个存 放另一个元素地址的指针(pointer ),用该指针来表 示数据元素之间的逻辑结构(关系)。
例:设有数据集合A={3.0,2.3,5.0,-8.5,11.0} ,两种不同
的存储结构。
– 顺序结构:数据元素存放的地址是连续的;
– 链式结构:数据元素存放的地址是否连续没有要 求。
1.1.4 数据结构的存储方式
数据结构在计算机内存中的存储包括数据元素的 存储和元素之间的关系的表示。
元素之间的关系在计算机中有两种不同的表示方法: 顺序表示和非顺序表示。由此得出两种不同的存储结构: 顺序存储结构和链式存储结构。
– 顺序存储结构:用数据元素在存储器中的相对位 置来表示数据元素之间的逻辑结构(关系)。
严蔚敏数据结构(排序)ppt课件
T(n)=O(n²)
空间杂度:S(n)=O(1)
折半插入排序 ❖排序过程:用折半查找方法确定插入位置的排序叫~
例 i=1
(30) 13 70 85 39 42 6 20
i=2 13 (13 30) 70 85 39 42 6 20
…...
i=7 6 (6 i=8 20 (6
s i=8 20 (6
s i=8 20 (6
若待排序记录按关键字从大到小排列(逆序)
关键字比较次数:
n i (n2)(n1)
i2
2
记录移动次数:
n
(n4)(n1)
(i1)
i2
2
0 1 2 34 5 6 7 97 76 65 49 38 27 13
若待排序记录是随机的,取平均值 关键字比较次数: n 2
4
记录移动次数:
n2 4
关键字较小的记录跳跃式前移,在进行 最后一趟增量为1的插入排序时,序列已 基本有序
增量序列取法
没有除1以外的公因子
最后一个增量值必须为1
9.2 快速排序
冒泡排序
❖排序过程
将第一个记录的关键字与第二个记录的关键字进行 比较,若为逆序r[1].key>r[2].key,则交换;然后 比较第二个记录与第三个记录;依次类推,直至第 n-1个记录和第n个记录比较为止——第一趟冒泡排 序,结果关键字最大的记录被安置在最后一个记录 上
❖算法描述
❖算法评价 时间复杂度:T(n)=O(n²) 空间复杂度:S(n)=O(1)
希尔排序(缩小增量法)
❖排序过程:先取一个正整数d1<n, 把所有相隔d1的记录放一组,组内 进行直接插入排序;然后取d2<d1, 重复上述分组和排序操作;直至 di=1,即所有记录放进一个组中排 序为止
哈工大-数据结构课件-严蔚敏《数据结构》(C语言版)
④ 程序中指令重复执行的次数。
[定义] 语句频度:语句重复执行的次数
1.4 算法与算法分析
第1章 绪论
描述算法的书写规则
所有算法均以函数形式给出, 算法的输入数据来自参数表; 参数表的参数在算法之前均进行类型说明;
有关结点结构的类型定义,以及全局变量的说明等均在算法之
前进行说明
评价算法标准
关系;
1.3 抽象数据类型的表示与实现
第1章 绪论
抽象数据型的实现
抽象描述 →(高级语言)编写的程序
三条原则:
①符合规格描述的定义; ②有尽可能好的通用性; ③尽可能独立于程序的其它部分
多层次抽象技术
自底向上与自顶向下相结合、由简单到复杂
1.3 抽象数据类型的表示与实现
抽象数据类型的形式描述
1.2 基本概念和术语
第1章 绪论
算法:数据运算的描述
数据结构:数据的逻辑结构和存储结构
算法+数据结构=程序
1.1 数据结构及其讨论范畴 1.2 基本概念和术语 1.3 抽象数据类型的表示与实现 1.4 算法和算法分析
1.3 抽象数据类型的表示与实现
第1章 绪论
抽象数据型Abstract Data Types(ADT) [定义]:抽象数据型是一个数学模型和在该模型 上定义的操作的集合
1.1 数据结构及其讨论范畴
第1章 绪论
数据结构是一门讨论"描述现实世界实体的数 学模型(非数值计算)及其上的操作在计算机中如何 表示和实现"的学科。 ① 在解决问题时可能遇到的典型的逻辑结构 (数据结构) ② 逻辑结构的存储映象(存储实现) ③ 数据结构的相关操作及其实现。
1.1 数据结构及其讨论范畴 例
数据结构严蔚敏PPT培训课件
【重点和难点】
相对于其它各个知识点而言,本章非整个课程 的重点,鉴于串已是多数高级语言中已经实现的数 据类型,因此本章重点仅在于了解串类型定义中各 基本操作的定义以及串的实现方法,并学会利用这 些基本操作来实现串的其它操作。本章的难点是理 解实现串匹配的KMP算法的思想,但它不属本章学 习的基本要求,更不是重点学习内容。
初始条件:chars 是字符串常量。 操作结果:把 chars 赋为 T 的值。
StrCopy (&T, S) 初始条件:串 S 存在。 操作结果:由串 S 复制得串 T。
DestroyString (&S)
____________________________________________________________ 36.2 最低报价不是被授予合同的保证。 ( 四 )具有较高的综合素质,创新意识、业务能力、组织协调能力、语言文字和口头表达能力较强。 7、培训要求 在对服务人才的培训过程中,最重要的是加强员工的服务意识,使员工们认识到服务的价值是为了维护自己的工作权。只有这样,员
数据关系:
R1={ < ai-1, ai > | ai-1, ai ∈D, i=2,...,n }
基本操作:
StrAssign (&T, chars)
DestroyString(&S) StrCopy (&T, S)
StrLength(S) StrCompare (S, T)
Concat (&T, S1, S2) StrEmpty (S)
操作结果:串 S 被销毁。 2、钢瓶的检查制度
7.2 卖方应在合同货物起运前或同时对装运的货物向保险公司投保以买方为受益人的发运合同货物发票金额的110%运输“一切险” 。该保险应履盖合同货物自卖方的发运仓库起至买方指定的工地仓库或工地安装现场开箱验收完毕止。
数据结构严蔚敏PPT完整版2024新版
选择排序的基本思想
在未排序序列中找到最小(或最大)元素,存放到排序 序列的起始位置,然后,再从剩余未排序元素中继续寻 找最小(或最大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。
交换排序和归并排序
交换排序的基本思想
通过不断地交换相邻的两个元素(如果它们的顺序错 误)来把最小的元素“浮”到数列的一端。具体实现 时,从第一个元素开始,比较相邻的两个元素,如果 前一个比后一个大,则交换它们的位置;每一对相邻 元素做同样的工作,从开始第一对到结尾的最后一对 ;这步做完后,最后的元素会是最大的数;针对所有 的元素重复以上的步骤,除了最后一个;持续每次对 越来越少的元素重复上面的步骤,直到没有任何一对 数字需要比较。
归并排序的基本思想
将两个或两个以上的有序表合并成一个新的有序表。具 体实现时,把长度为n的输入序列分成两个长度为n/2 的子序列;对这两个子序列分别采用归并排序;将两个 排序好的子序列合并成一个最终的排序序列。
查找的基本概念和方法
查找的定义
根据给定的某个值,在查找表中确定 一个其关键字等于给定值的数据元素 的过程或操作。
数组的定义和基本操作
数组的定义
数组(Array)是由相同类型的元素( element)的集合所组成的数据结构 ,分配一块连续的内存来存储。利用 元素的索引(index)可以计算出该 元素对应的存储位置。
数组的基本操作
数组的基本操作包括数组的创建、数 组的初始化、数组的访问、数组的遍 历、数组的排序和数组的查找等。
顺序表的基本操作实现
包括插入、删除、查找等操作,时间复杂度为 O(n)。
顺序表的特点
支持随机访问,存储密度高,但插入和删除操作需要移动大量元素。
最新2019-清华大学严蔚敏数据结构ppt课件-PPT课件
数据对象可以是有限的,也可以是无限的。 数据结构不同于数据类型,也不同于数据对 象,它不仅要描述数据类型的数据对象,而且 要描述数据对象各元素之间的相互关系。 抽象数据类型:一个数学模型以及定义在该模 型上的一组操作。 抽象数据类型实际上就是对该数据结构的 定义。因为它定义了一个数据的逻辑结构以及 在此结构上的一组算法。 用三元组描述如下: (D,S,P)
ห้องสมุดไป่ตู้
数据类型:在一种程序设计语言中,变量所具 有的数据种类。 例1、 在FORTRAN语言中,变量的数据类型 有整型、实型、和复数型 例2、在C语言中 数据类型:基本类型和构造类型 基本类型:整型、浮点型、字符型 构造类型:数组、结构、联合、指针、枚举型、 自定义 数据对象:某种数据类型元素的集合。 例3、整数的数据对象是{…-3,-2,-1,0,1, 2,3,…} 英文字符类型的数据对象是{A,B,C,D,E,
数据结构的形式定义为:数据结构是一个二元 组: Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的 有限集。 例 复数的数据结构定义如下: Complex=(C,R) 其中:C是含两个实数的集合﹛C1,C2﹜,分 别表示复数的实部和虚部。R={P},P是定义在 集合上的一种关系{〈C1,C2〉}。 数据结构在计算机中的表示称为数据的物理结 构,又称为存储结构。
1.3 抽象数据类型的表示和实现
P11
1.4 算法和算法分析 算法:是对特定问题求解步骤的一种描述 算法是指令的有限序列,其中每一条指令 表示一个或多个操作。 算法具有以下五个特性: (1)有穷性 一个算法必须总是在执行有穷步 之后结束,且每一步都在有穷时间内完成。 (2)确定性 算法中每一条指令必须有确切的 含义。不存在二义性。且算法只有一个入口和 一个出口。 (3)可行性 一个算法是可行的。即算法描述 的操作都是可以通过已经实现的基本运算执行 有限次来实现的。
数据结构严蔚敏ppt课件
数据结构严蔚敏ppt课件数据结构(严蔚敏)版●资料上传者:安徽大学研究生●资料使用范围:各大学考研及本科教学●欢迎报考安徽大学研究生●“星光考研书屋”祝您学习愉快[学习目标]掌握线性表的顺序存储结构和抽象数据类型中定义的每一种操作的含义,在顺序存储方式下每一种操作的具体实现和相应的时间复杂度;掌握链接存储的概念,线性表的单、双链接存储结构,对它们进行插入和删除结点的方法,循环单、双链表和带表头附加结点的单、双链表的结构和操作特点;掌握每一种线性表操作在由动态结点构成的单链表上具体实现的算法以及相应的时间复杂度。
2第2章线性表线性结构是最常用、最简单的一种数据结构。
而线性表是一种典型的线性结构。
其基本特点是线性表中的数据元素是有序且是有限的。
在这种结构中:① 存在一个唯一的被称为“第一个”的数据元素;② 存在一个唯一的被称为“最后一个”的数据元素;③ 除第一个元素外,每个元素均有唯一一个直接前驱;④ 除最后一个元素外,每个元素均有唯一一个直接后继。
32.1 线性表的逻辑结构线性表(Linear List ) :是由n(n ≧0)个数据元素(结点)a 1,a 2,…a n 组成的有限序列。
该序列中的所有结点具有相同的数据类型。
其中数据元素的个数n 称为线性表的长度。
当n=0时,称为空表。
当n>0时,将非空的线性表记作: (a 1,a 2,…a n ) a 1称为线性表的第一个(首)结点,a n 称为线性表的最后一个(尾)结点。
2.1.1 线性表的定义4a1,a2,…a i-1都是a i(2≦i≦n)的前驱,其中a i-1是a i的直接前驱;a i+1,a i+2,…a n都是a i(1≦i ≦n-1)的后继,其中a i+1是a i 的直接后继。
2.1.2线性表的逻辑结构线性表中的数据元素a i所代表的具体含义随具体应用的不同而不同,在线性表的定义中,只不过是一个抽象的表示符号。
◆线性表中的结点可以是单值元素(每个元素只有一个数据项) 。
严蔚敏版数据结构(C语言版)PPT-第九章
2
第 9 章 查找 9.1 查找的基本概念 查找表的分类
数 据 结 构
静态查找表 仅作查询和检索操作 动态查找表
“不在查找表中”的数据元素插入到查找表中; 删除其“查询”结果为“在查找表中”的数据元 素。
查找还可分为:内查找和外查找。
3
第 9 章 查找 9.1 查找的基本概念
数 据 结 构
关键字: 是数据元素(或记录)中某个数据项的值, 用以标识(识别)一个数据元素(或记录)。
举例:
例1: key= 70 64 的查找过程如下:
数 据 结 构
05 13 19 21 37 56 64 75 80 88 92
1 2 3 4 5 6 7 8 9 10 11 12
low
low highhighmid mid low mid mid
high
high<low 查找不成功 low=mid+1=7 high=11 mid=(7+11)/2=9 ① ② high=mid-1=8 ③ low=1 key>mid key<mid key=mid 指向的记录值 所指向的记录值 mid=(8+7)/2=7 mid=(1+11)/2=6 查找成功
第 9 章 查找 9.1 查找的基本概念
查找表是由同一类型的数据元素(或记录)构
数 据 结 构
成的集合。 由于“集合”中的数据元素之间存在着松散 的关系,因此查找表是一种应用灵便的结构。
1
第 9 章 查找 9.1 查找的基本概念 对查找表常进行的操作:
数 据ቤተ መጻሕፍቲ ባይዱ结 构
1)查询某个“特定的”数据元素是否在查找表中 静态 2)检索某个“特定的”数据元素的各种属性 3)在查找表中插入一个数据元素 4)从查找表中删去某个数据元素 动态查找
数据结构 C语言版(严蔚敏版)第9章 查找
若大于,查找范围的高端数据元素指针high 不变,低端数据元素指针low更新为mid+1; (4)重复步骤(2)、(3)直到查找成功或 查找范围空(low>high),即查找失败为止。 (5)如果查找成功,返回找到元素的存放位 置,即当前的中间项位置指针 mid;否则返回 查找失败标志。
折半查找的c语言算法程序: int Search_Bin( SSTable ST, int n, int key) {int low, high,mid;
查找:在数据元素集合中查找满足某种条 件的数据元素的过程称为查找。最简单且最常 用的查找条件是“关键字值等于某个给定值” ,在查找表搜索关键字等于给定值的数据元素 (或记录)。若表中存在这样的记录,则称查 找成功,此时的查找结果应给出找到记录的全 部信息或指示找到记录的存储位置;若表中不 存在关键字等于给定值的记录,则称查找不成 功,此时查找的结果可以给出一个空记录或空 指针。若按主关键字查找,查找结果是唯一的 ;若按次关键字查找,结果可能是多个记录, 即结果可能不唯一。
while(ST[i].key!=key) i- -;
return i; }
0 1 0
/*从表尾往前查*/ 找到:返回元素 的存 1 2 3 4 在线 5 性表 6 中7 10 20 40 80 储位置; 30 60 25 (a) 初态 未找到:返回0。
2 3 4 5 6 7
80
监视哨 0
10
1
20
动态查找表:若在查找过程中可以将查找 表中不存在的 数据元素插入 ,或者从查找表中 删除某个数据元素 ,则称这类查找表为动态查 找表。动态查找表在查找过程中查找表可能会 发生变化。对动态查找表进行的查找操作称为 动态查找。 关键字:是数据元素中的某个数据项。唯 一能标识数据元素(或记录)的关键字,即每 个元素的关键字值互不相同,我们称这种关键 字为主关键字;若查找表中某些元素的关键字 值相同,称这种关键字为次关键字。例如,银 行帐户中的帐号是主关键字,而姓名是次关键 字。
数据结构(C)严蔚敏-(文件)PPT课件
2021/3/12
Page 2
单关键字文件
❖ 文件中的记录只有一个唯一标识记录的主关键字。
多关键字文件
❖ 文件中的记录除了含有一个主关键字外,还含有若干个次关键字。
记录的属性
❖ 记录中所有非关键字的数据项。
记录的逻辑结构
❖ 记录在用户或应用程序员面前呈现的方式,是用户对数据的表示和 存取方式。
文件的检索方式
❖ 顺序存取:存取下一个逻辑记录。 ❖ 直接存取;存取第i个逻辑记录。 ❖ 按关键字存取:
简单查询、区域查询、函数查询、布尔查询
Data Structure
2021/3/12
Page 4
文件的修改
❖ 记录的插入、删除、修改。
文件的物理结构
❖ 文件在外存上的组织方式。 ➢ 顺序组织 ➢ 随机组织 ➢ 链组织
记录的物理结构
❖ 数据在物理存储器上存储的方式,是数据的物理表示和组织。
Data Structure
2021/3/12
Page 3
物理记录
❖ 计算机用一条I/0命令进行读写的基本数据单位(物理块)。 ❖ 物理记录和逻辑记录之间可能存在下列三种关系:
➢ 一个物理记录存放一个逻辑记录; ➢ 一个物理记录包含多个逻辑记录; ➢ 多个物理记录表示一个逻辑记录。
项。索引项指出该记录的物理地址。最后,索引表按关键字排序。 ❖ 只能存储在磁盘存储设备上。
Data Structure
2021/3/12
Page 8
物理记录号 职工号 姓名 职务 其他
101
29 张珊 程序员
103
05 李四 维修员
104
02 王红 程序员
105
38 刘淇 穿孔员
数据结构-清华大学严蔚敏PPT
④ 输入: 一个算法有零个或多个输入,这些输入 取自于某个特定的对象集合。
⑤ 输出: 一个算法有一个或多个输出,这些输出 是同输入有着某些特定关系的量。
一个算法可以用多种方法描述,主要有:使用自 然语言描述;使用形式语言描述;使用计算机程序设计 语言描述。
初始化赋值查找修改插入删除求长度等初始化赋值查找修改插入删除求长度等以下将对几种主要的操作进行讨论以下将对几种主要的操作进行讨论statusinitsqlistsqliststatusinitsqlistsqlistlelemarrayelemtypelelemarrayelemtypemallocmaxsizesizeofelemtypemallocmaxsizesizeofelemtypereturnerrorreturnerrorreturnokreturnok在线性表在线性表i1i1i1i1个位置上插入一个新结点个位置上插入一个新结点使其成使其成为线性表为线性表i1i1i1i1将线性表将线性表个结点后移一个位个结点后移一个位将结点将结点插入到结点插入到结点i1i1之后之后线性表长度加线性表长度加算法描述算法描述statusinsertsqlistsqliststatusinsertsqlistsqlistelemtypeelemtypei0illength1returnerrori0illength1returnerror线性表溢出线性表溢出returnerrorlelemarrayj1lelemarrayj
算法与数据结构
教材:《数据结构 (C 语言版 ) 》。严蔚敏,吴伟民
编
著。清华大学出版社。
参考文献:
1 《数据结构》 。张选平,雷咏梅 编, 严蔚敏 审。 机械工业出版社。
严蔚敏版数据结构C语言版PPT第九章
度较大,特别不适用于表长较大的查找表。
数
据 结
若以有序表表示查找表,则查找过程
构 可以基于“折半”进行。
折半查找只适用于有序表,且限于顺序存储结构
13
第 9 章 查找 9.2 基于线性表的查找 ②折半查找
基本思想: 数 1.首先确定查找表的中间位置;
据
结 2.然后将待查的值与中间位置的值进行比较, 构 若相等,则查找成功并返回此位置,否则须
50 -2 60 1
80 0 (a)一棵平衡二叉排序树
58 0 (b)一棵失去平衡的二叉排序树
30
第 9 章 查找
9.4 计算式查找法—哈希表
哈希表是什么?
以上两节讨论的表示查找表的各种结构的
数
共同特点:
据
结
1.记录在表中的位置和它的关键
构
字之间不存在一个确定的关系;
2.查找的过程为给定值依次和关 键字集合中各个关键字进行比较;
23
第 9 章 查找 9.3 基于树的查找 ①二叉排序树
例如: 50
数
30
80
据 结
20
40
90
构
10 25 35
66 85
23
88
不 是二叉排序树。
24
第 9 章 查找
9.3 基于树的查找 ①二叉排序树 查找算法
若二叉排序树为空,则查找不成功;
否则,
数 1. 若给定值等于根结点的关键字,则查找成功;
线性表的三种查找方法比较
顺序查找 折半查找 分块查找
数
据 表的结构 有序、无序
有序
表间有序
结
构 表的存储 顺序、链式
顺序
顺序、链式
250页的精品清华大学严蔚敏数据结构
(4)效率与存储量需求 效率指的是算法执行的时 间;存储量需求指算法执行过程中所需要的最 大存储空间。一般,这两者与问题的规模有关。
1.4.3 算法效率的度量 对一个算法要作出全面的分析可分成两用人才 个阶段进行,即事先分析和事后测试
事先分析 求出该算法的一个时间界限函数
事后测试 收集此算法的执行时间和实际占用空 间的统计资料。
时间复杂度为O(1) 如果将s=0也看成是基本操作,则语句频度为2,
其时间复杂度仍为O(1),即常量阶。 例3、for(I=1;I<=n;++I)
{++x;s+=x;} 语句频度为:2n 其时间复杂度为:O(n)
例4、for(I=1;I<=n;++I)
for(j=1;j<=n;++j)
{++x;s+=x;} 语句频度为:2n2 其时间复杂度为:O(n2) 即时间复杂度为平方阶。 定理:若A(n)=a m n m +a m-1 n m-1 +…+a1n+a0是一 个m次多项式,则A(n)=O(n m)
定义:如果存在两个正常数c和n0,对于所有的 n≧n0,有︱f(n) ︳≦c|g(n) ︳
则记作 f(n)=O(g(n))
一般情况下,算法中基本操作重复执行的 次数是问题规模n的某个函数,算法的时 间量度记作
T(n)=O(f(n)) 称作算法的渐近时间复杂度。 例1、for(I=1,I<=n;++I)
2.3.2 循环链表 2.3.3 双向链表 2.4 一元多项式的表示及相加
2.1 线性表的逻辑结构
线性表(Linear List) :由n(n≧)个数据元素(结 点)a1,a2, …an组成的有限序列。其中数据元 素的个数n定义为表的长度。当n=0时称为空表, 常常将非空的线性表(n>0)记作:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、有序查找表
上述顺序查找表的查找算法简单,
但平均查找长度较大,特别不适用 于表长较大的查找表。
若以有序表表示静态查找表,则
查找过程可以基于“折半”进行。
第31页 2013年7月12日星期五
例如: key=64 的查找过程如下:
ST.length
ST.elem
顺序表查找的平均查找长度为:
1 n n 1 ASLss (n i 1 ) n i 1 2
第29页 2013年7月12日星期五
在不等概率查找的情况下,ASLss 在
Pn≥Pn-1≥·≥P2≥P1 · · 时取极小值
若查找概率无法事先测定,则查找 过程采取的改进办法是,在每次查找之 后,将刚刚查找到的记录直接移至表尾 的位臵上。
return i; } // Search_Seq
2013年7月12日星期五
// 从后往前找 // 找不到时,i为0
第27页
分析顺序查找的时间性能 定义: 查找算法的平均查找长度
(Average Search Length)
为确定记录在查找表中的位臵,需和给定值
进行比较的关键字个数的期望值
ASL PiCi
0 1
假设给定值 e=64,
要求 ST.elem[k] = e, 问: k = ?
第24页 2013年7月12日星期五
int location( SqList L, ElemType& e,
Status (*compare)(ElemType, ElemType))
{
k = 1; p = L.elem; while ( k<=L.length && !(*compare)(*p++,e))) k++; if ( k<= L.length) return k; else return 0; } //location
05 13 19 21 37 56 64 75 80 88 92
0 1 2
low
3 4
5 6
7 8
9 10 11
high
low high mid mid mid
low 指示查找区间的下界 high 指示查找区间的上界 mid = (low+high)/2
第32页 2013年7月12日星期五
int Search_Bin ( SSTable ST, KeyType key ) { low = 1; high = ST.length; // 臵区间初值 while (low <= high) { mid = (low + high) / 2; if (EQ (key , ST.elem[mid].key) ) return mid; // 找到待查元素 else if ( LT (key , ST.elem[mid].key) ) high = mid - 1; // 继续在前半区间进行查找 else low = mid + 1; // 继续在后半区间进行查找 } return 0; // 顺序表中不存在待查元素
关键字
是数据元素(或记录)中某个数据项 的值,用以标识(识别)一个数据元 素(或记录)。 若此关键字可以识别唯一的一个记 录,则称之谓“主关键字”。 若此关键字能识别若干记录,则称
之谓“次关键字”。
第9页 2013年7月12日星期五
查找
根据给定的某个值,在查找表中确定一个 其关键字等于给定值的数据元素或(记录)。 若查找表中存在这样一个记录,则称 “查找成功”。查找结果给出整个记录的 信息,或指示该记录在查找表中的位臵; 否则称“查找不成功”。查找结果给出
int
2013年7月12日星期五
length; // 表的长度
第20页
} SSTable;
数据元素类型的定义为:
typedef struct { keyType key; // 关键字域 // 其它属性域
……
} ElemType ;, TElemType ;
第21页 2013年7月12日星期五
一、顺序查找表 二、有序查找表 三、静态查找树表(*)
操作结果:按某种次序对ST的每个元
素调用函数Visit()一次且仅 一次,一旦Visit()失败,则 操作失败。
第19页 2013年7月12日星期五
假设静态查找表的顺序存储结构为
typedef struct {
ElemType *elem;
// 数据元素存储空间基址,建表时
// 按实际长度分配,0号单元留空
9.1 静态查找表 9.2 动态查找树表 9.3 哈希表
第12页 2013年7月12日星期五
9.1 静态查找表
第13页 2013年7月12日星期五
ADT StaticSearchTable { 数据对象D:D是具有相同特性的数
据元素的集合。每个数 据元素含有类型相同的 关键字,可唯一标识数 据元素。
第26页
7 8
9 10 11 ST.Length
key=60
2013年7月12日星期五
int Search_Seq(SSTable ST, KeyType key) {
// 在顺序表ST中顺序查找其关键字等于 // key的数据元素。若找到,则函数值为 // 该元素在表中的位臵,否则为0。
ST.elem[0].key = key; // “哨兵” for (i=ST.length; ST.elem[i].key!=key; --i);
第25页 2013年7月12日星期五
ST.elem
i
2 3 4 5 6 7 8
i
64 21 37 88 19 92 05 64 56 80 75 13
0 1 9 10 11 ST.Length
key=64 i
ST.elem
i
60 21 37 88 19 92 05 64 56 80 75 13
0 1 2 3 4 5 6
第3页 2013年7月12日星期五
【重点和难点】
本章重点在于理解查找表的结构特点及其各 种表示方法的特点和适用场合。
【知识点】
顺序表、有序表、索引顺序表、二叉查找树、 二叉平衡树、哈希表
第4页 2013年7月12日星期五
【学习指南】
本章讨论的查找表即为绪论中提到的"集合"结构, 由于它是很多应用软件中的操作对象,因此本章讨 论的内容亦为整个课程的重点之一。由于集合中的 数据元素之间不存在任何关系,因此它的主要操作 "查找"不便进行,为了提高对查找表进行查找的效 率需要以另一种数据结构表示之。因此在学习本章 的过程中应该掌握各种表示方法的特点以便在实用 中能灵活选用。本章要求必须完成的算法设计题为: 9.25,9.26,9.28,9.29,9.31.9.38,9.39 和 9.45。
四、索引顺序表
第22页 2013年7月12日星期五
一、顺序查找表
以顺序表或线性链表
表Hale Waihona Puke 静态查找表第23页 2013年7月12日星期五
回顾顺序表的查找过程:
k
ST.elem
k
2 3 4 5 6 7 8 9 10 11 ST.Length
21 37 88 19 92 05 64 56 80 75 13
2013年7月12日星期五
【学习目标】
1.理解"查找表"的结构特点以及各种表示方法的适用性; 2.熟练掌握以顺序表或有序表表示静态查找表时的查找 方法; 3.熟悉静态查找树的构造方法和查找算法,理解静态查 找树和折半查找的关系; 4.熟练掌握二叉查找树的构造和查找方法; 5.理解二叉平衡树的构造过程; 6.熟练掌握哈希表的构造方法,深刻理解哈希表与其它 结构的表的实质性的差别; 7.掌握描述查找过程的判定树的构造方法,以及按定义 计算各种查找方法在等概率情况下查找成功时的平均查找 长度。
二叉树的深度相同。
假设 n=2h-1 并且查找概率相等 则
1 n 1 h n 1 j 1 ASLbs Ci j 2 log2 (n 1) 1 n i 1 n j 1 n
在n>50时,可得近似结果
ASL log2 (n 1) 1 bs
Create(&ST, n);
操作结果:构造一个含n个数据元素
的静态查找表ST。
第16页 2013年7月12日星期五
Destroy(&ST);
初始条件:静态查找表ST存在; 操作结果:销毁表ST。
第17页 2013年7月12日星期五
Search(ST, key);
初始条件: 静态查找表ST存在,key 为
查找“索引”的平均查找长度
+ 查找“顺序表”的平均查找长度
第37页 2013年7月12日星期五
9.2 动态查找树表
第38页 2013年7月12日星期五
抽象数据类型动态查找表的定义如下:
第5页 2013年7月12日星期五
何谓查找表 ?
查找表是由同一类型的数据元素
(或记录)构成的集合。
由于“集合”中的数据元素之间存在 着松散的关系,因此查找表是一种应用 灵便的结构。
第6页 2013年7月12日星期五
对查找表经常进行的操作:
• 1)查询某个“特定的”数据元素是 否在查找表中; • 2)检索某个“特定的”数据元素的 各种属性; • 3)在查找表中插入一个数据元素;
第九章 查 找
第1页 2013年7月12日星期五
【课前思考】
在数学中"集合"的定义是什么?
在数学中,集合是一种简单得无法用数学语言 精确定义的基本概念,一般认为,集合是一些具有 确定可辨认特性事物构成的整体,只能判别某个特 定事物是否属于某个集合,如果是,则称为是该集 合的一个“元素”。集合中的元素彼此相异,但相 互之间不存在任何关系,通俗地说,集合是由“一 堆”事物构成的一个整体。 本章讨论的查找表正是如同数学中讨论的集合, 因此它的主要操作就是判定某个数据元素是否属于 该查找表。 第2页