数据结构-复习与习题解析1课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构-复习与习题解析1课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习 习题 解析 课件
- 资源描述:
-
1、第一讲 绪论p了解数据结构有关概念的含义,特别是数据的了解数据结构有关概念的含义,特别是数据的逻辑结构和存储结构之间的关系;(逻辑结构和存储结构之间的关系;(重点重点)p熟悉类熟悉类C C语言的书写规范;语言的书写规范;p了解计算算法时间复杂度的方法。(了解计算算法时间复杂度的方法。(难点难点)3/24/20221数据结构的定义 按某种逻辑关系按某种逻辑关系组织起来的一批数据(或组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语称带结构的数据元素的集合)应用计算机语言并言并按一定的存储表示方式按一定的存储表示方式把它们存储在计把它们存储在计算机的存储器中,并算机的存储器中,并在其上定
2、义了一个运算在其上定义了一个运算的集合的集合。基本概念和术语p【数据】是对信息的一种符号表示。是是对信息的一种符号表示。是可以输入可以输入计算机中,计算机中, 能被计算机能被计算机识别处理和输出的识别处理和输出的一切一切符号集合。符号集合。p【数据元素】是数据的是数据的基本单位基本单位,在计算机中通常作为一个,在计算机中通常作为一个 整体进行考虑和处理。也称为整体进行考虑和处理。也称为记录记录。p【数据项】一个数据元素可由若干个数据项组成。是数据不一个数据元素可由若干个数据项组成。是数据不可分割的可分割的最小单位最小单位。p【数据对象】是是性质相同性质相同的数据元素的集合。是数据的一个的数据元
3、素的集合。是数据的一个 子集子集。3/24/20223p【数据结构】相互之间存在一种或多种相互之间存在一种或多种特定关系特定关系的数据的数据 元素的集合元素的集合计算机如何解决问题3/24/20224问题问题机外表示机外表示处理要求处理要求逻辑结构逻辑结构基本运算基本运算数学模型数学模型存储结构存储结构编程实现编程实现实现实现建模建模求精求精研究数据结构是为了帮计算机解决问题!研究数据结构是为了帮计算机解决问题!数据结构的研究内容3/24/20225【数据结构的三个方面研究内容】具体来说,数据结构包】具体来说,数据结构包含三个方面的内容,即含三个方面的内容,即数据的逻辑结构数据的逻辑结构,数据
4、的存储结构数据的存储结构和和对数据所施加的运算对数据所施加的运算(操作)。(操作)。 数据的逻辑结构数据的逻辑结构(面向人类)(面向人类) 数据的存储结构数据的存储结构(面向计算机)(面向计算机) 数据的运算(操作):检索、排序、插入、删除、修改等数据的运算(操作):检索、排序、插入、删除、修改等 线性结构线性结构 非线性结构非线性结构顺序存储顺序存储链式存储链式存储 线性表线性表栈栈队列队列树形结构树形结构图形结构图形结构散列存储散列存储索引存储索引存储串及数组串及数组四种基本逻辑结构3/24/20226【集合】 数据元素间除了“同属于一个集合”外,无其他关系。【线性结构】 1对1的关系比如
5、线性表、栈、队列。【树形结构】 1对多的关系比如树。【图形结构】 多对多的关系比如图。算法与数据结构p算法与数据结构关系密切p选择的数据结构是否恰当直接影响算法的效率;选择的数据结构是否恰当直接影响算法的效率;而数据结构的优劣由算法的执行来体现。而数据结构的优劣由算法的执行来体现。p“算法算法 + + 数据结构数据结构 = = 程序程序”p算法 != 程序p算法是算法是供人阅读供人阅读的,程序是的,程序是让机器执行让机器执行的的p算法用算法用计算机语言实现计算机语言实现时就是程序时就是程序p程序不具有算法的程序不具有算法的有穷性有穷性算法的概念v算法是解决某个特定问题的求解算法是解决某个特定问
6、题的求解步骤步骤的描述。的描述。v算法在计算机中表现为指令的算法在计算机中表现为指令的有限有限序列,每条指令表示一序列,每条指令表示一个或多个操作。个或多个操作。v计算机对数据的操作可以分为计算机对数据的操作可以分为数值性数值性和和非数值性非数值性两种类型两种类型。在数值性操作中主要进行的是算术运算;而在非数值性。在数值性操作中主要进行的是算术运算;而在非数值性操作中主要进行的是检索、排序、插入、删除等等。操作中主要进行的是检索、排序、插入、删除等等。v程序程序不等于不等于算法:计算机程序是算法的具体实现。算法:计算机程序是算法的具体实现。3/24/20228(1)有穷性:一个算法必须在执行有
7、穷步之后结束。:一个算法必须在执行有穷步之后结束。(2)确定性:算法中的每一步,必须有确切的含义,在他:算法中的每一步,必须有确切的含义,在他人理解时不会产生二义性。人理解时不会产生二义性。(3)可行性:算法中描述的每一步操作都可以通过已有的:算法中描述的每一步操作都可以通过已有的基本操作执行有限次实现。基本操作执行有限次实现。(4)输入:一个算法应该有零个或多个输入。:一个算法应该有零个或多个输入。(5)输出:一个算法应该有一个或多个输出。这里所说的:一个算法应该有一个或多个输出。这里所说的输出是指与输入有某种特定关系的量。输出是指与输入有某种特定关系的量。算法的性质算法设计的要求v正确性(
8、四个境界)(四个境界)q没有语法错误没有语法错误q对于合法的输入数据能够产生满足要求的输出对于合法的输入数据能够产生满足要求的输出q对于非法的输入数据能够得出满足规格说明的结果对于非法的输入数据能够得出满足规格说明的结果q对于任何测试数据都有满足要求的输出结果对于任何测试数据都有满足要求的输出结果v可读性:便于阅读、理解和交流:便于阅读、理解和交流v健壮性:不合法数据也能合理处理:不合法数据也能合理处理v时间效率高和存储量低3/24/202210算法效率的度量方法v事后统计方法q通过设计好的测试程序和数据,利用计算机测量其运行时间。通过设计好的测试程序和数据,利用计算机测量其运行时间。q缺陷:
9、需要先编写程序;和计算机软硬件相关;和测试数据相关。缺陷:需要先编写程序;和计算机软硬件相关;和测试数据相关。v事前分析估算方法(我们的选择)q依据依据统计方法统计方法对算法进行对算法进行估算估算。m = f(n),m是语句总的执行次数是语句总的执行次数,n是输入的规模。是输入的规模。q和问题输入规模相关和问题输入规模相关,独立于程序设计语言和计算机软硬件,独立于程序设计语言和计算机软硬件3/24/202211算法时间复杂度3/24/202212p在进行算法分析时,语句的总执行次数在进行算法分析时,语句的总执行次数 T(n)是关于问题是关于问题规模规模 n 的函数,进而分析的函数,进而分析 T
10、(n) 随随 n 的的变化情况变化情况并确定并确定 T(n) 的的数量级数量级。p算法的时间复杂度,也就是算法的时间量度,用算法的时间复杂度,也就是算法的时间量度,用“大大O记法记法”记作:记作:T(n)=O(f(n)。由此得到的。由此得到的 T(n) 的数量级叫的数量级叫“大大O阶阶”。它表示随问题规模。它表示随问题规模 n 的增大,算法执行时间增长的增大,算法执行时间增长率和率和 f(n)的的增长率相同增长率相同,称作算法的,称作算法的渐进时间复杂度渐进时间复杂度,简,简称时间复杂度。其中称时间复杂度。其中 f(n) 是问题规模是问题规模 n 的的某个函数某个函数。p一般情况下,一般情况下
11、,T(n)增长增长越慢越慢,算法,算法越优越优。大O阶的数学定义 当当n时,有时,有f(n)/g(n)=常数常数0,则称函数,则称函数f(n)与与g(n)同阶同阶,或者说,或者说,f(n)与与g(n)同一个数量级,记作同一个数量级,记作 f(n)=O(g(n) 称上式为算法的时间复杂度称上式为算法的时间复杂度,或称该算法的时间复杂或称该算法的时间复杂度为度为O(g(n) 。其中。其中, n为问题的规模为问题的规模(大小大小)的量度。的量度。若lim(f(n)/g(n) =lim(2n3 + 3n2 + 2n + 1)/n3) =2nn则算法的时间复杂度为O(n3)算法空间复杂度3/24/202
12、214算法的空间复杂度通过计算算法算法的空间复杂度通过计算算法所需的存储空间所需的存储空间实现,实现,算法空间复杂度的计算公式记作:算法空间复杂度的计算公式记作:S(n) = O(f(n),其中,其中, n 为问题的规模,为问题的规模,f(n)为语句关于为语句关于 n 所占存所占存储空间的函数。储空间的函数。 我们主要讨论时间复杂度问题。例题解析【例1】数据元素之间的关系在计算机中有几种表示方法?各有什么特点?答:答:四种表示方法四种表示方法(1)顺序存储方式。顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据元素
13、间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。数据元素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。(2)链式存储方式。链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指每个存储结点除包含数据元素信息外还包含一组(至少一个)指针。指针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操针。指针反映数据元素间的逻辑关系。这种方式不要求存储空间连续,便于动态操作(如插入、删除等),但存储空间开销大(用于指针),另外不能折半查找等。作(如插入、删除等),但存储空间开销大(用于指针),另外不能折半查找等。(3)索引存储方式。索引存储方式。
14、除数据元素存储在一地址连续的内存空间外,尚需建立一个索引除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表,索引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标),兼表,索引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标),兼有静态和动态特性。有静态和动态特性。(4)散列存储方式。散列存储方式。通过散列函数和解决冲突的方法,将关键字散列在连续的有限的通过散列函数和解决冲突的方法,将关键字散列在连续的有限的地址空间内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式地址空间内,并将散列函数的值解释成关键字所在元素的存储地址,这种存储方式称为散列存储。其特
15、点是存取速度快,只能按关键字随机存取,不能顺序存取,也称为散列存储。其特点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。不能折半存取。3/24/202215例题解析【例2】有下列运行时间函数: (1)T1(n)=1000; (2)T2(n)=n2+1000n; (3)T3(n)=3n3+100n2+n+1; 分别写出相应的大 O 表示的运算时间答:答:(1)O(1) (2)O(n2) (3)O(n3)3/24/202216例题解析【例3】已知如下程序段for(i=n;i0;i-) 语句1 x=x+1;语句2 for(j=n;j=i;j-)语句3 y=y+1; 语句4语句1执
16、行的频度为_;语句2执行的频度为_;语句3执行的频度为_;语句4执行的频度为_。答:(1)n+1 (2)n (3)n(n+3)/2 (4)n(n+1)/2 第二讲 线性表v线性结构的定义和特点q在数据元素的非空有限集中,有且仅有一个开始结点和在数据元素的非空有限集中,有且仅有一个开始结点和一个终端结点,并且所有结点只有一个直接前趋和一个一个终端结点,并且所有结点只有一个直接前趋和一个直接后继。简言之,线性结构反映结点间的逻辑关系是直接后继。简言之,线性结构反映结点间的逻辑关系是 一对一一对一。线性结构包括线性表、堆栈、队列、字符串、。线性结构包括线性表、堆栈、队列、字符串、数组等等,其中,最简
17、单、最常用的是线性表。数组等等,其中,最简单、最常用的是线性表。v线性表的存储方法q顺序存储:逻辑上相邻物理上顺序存储:逻辑上相邻物理上一定一定相邻相邻q链式存储:逻辑上相邻物理上链式存储:逻辑上相邻物理上不一定不一定相邻相邻顺序表v顺序表线性表的顺序存储表示线性表的顺序存储表示v顺序存储用一用一组地址连续的组地址连续的存储单元存储单元依次依次存储线性表存储线性表的元素,可通过的元素,可通过数组数组来实现。(逻辑上相邻物理上一定相来实现。(逻辑上相邻物理上一定相邻)邻)q LOC(ai ) = LOC(a1) + (i - 1) len (a1为首元素,为首元素,len为单个元素占用空间长度为
18、单个元素占用空间长度)v顺序存储的优点q可以随机存取表中任一元素可以随机存取表中任一元素O(1);存储空间使用紧凑;存储空间使用紧凑v顺序存储的缺点q在插入元素时平均需要移动在插入元素时平均需要移动n/2个元素,删除某一元素时,平均需个元素,删除某一元素时,平均需要移动要移动n-1/2个元素。算法的平均时间复杂度为个元素。算法的平均时间复杂度为O(n)q预先分配空间需按最大空间分配,利用不充分预先分配空间需按最大空间分配,利用不充分;表容量难以扩充表容量难以扩充3/24/202219链表v链式存储结构特点q用一组任意的存储单元存储线性表的数据元素用一组任意的存储单元存储线性表的数据元素q利用指
19、针实现了用不相邻的存储单元存放逻辑上相邻的元素利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素q每个数据元素每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息,除存储本身信息外,还需存储其直接后继的信息 v链式存储结构的优点:q结点空间可以结点空间可以动态申请和释放动态申请和释放;q数据元素的逻辑次序靠结点的指针来指示,数据元素的逻辑次序靠结点的指针来指示,插入和删除时不需要移插入和删除时不需要移动数据元素动数据元素。v链式存储结构的缺点:q每个结点的每个结点的。当数据域所占字节不多时。当数据域所占字节不多时,指针域所占存储空间的比重显得很大。,指针域所占存储空间的比重显得很大。
20、 q链表链表是是结构结构。对任一结点的操作都要从头指针依链查找。对任一结点的操作都要从头指针依链查找该结点,这增加了算法的复杂度该结点,这增加了算法的复杂度 O(n)q不便于不便于在表尾在表尾插入插入元素:需遍历整个表才能找到位置。元素:需遍历整个表才能找到位置。3/24/202220例题解析【例例1】说明在线性表的链式存储结构中,头指针与头说明在线性表的链式存储结构中,头指针与头结点之间的根本区别。结点之间的根本区别。答:答:在线性表的链式存储结构中,头指针指链表的指针,若链在线性表的链式存储结构中,头指针指链表的指针,若链表有头结点则是链表的头结点的指针,头指针具有标识作表有头结点则是链表
21、的头结点的指针,头指针具有标识作用,故常用头指针冠以链表的名字。用,故常用头指针冠以链表的名字。头结点是为了操作的统一、方便而设立的,放在第一元素头结点是为了操作的统一、方便而设立的,放在第一元素结点之前,其数据域一般无意义(当然有些情况下也可存结点之前,其数据域一般无意义(当然有些情况下也可存放链表的长度、用做监视哨等等),有头结点后,对在第放链表的长度、用做监视哨等等),有头结点后,对在第一元素结点前插入结点和删除第一结点,其操作与对其它一元素结点前插入结点和删除第一结点,其操作与对其它结点的操作统一了。而且无论链表是否为空,头指针均不结点的操作统一了。而且无论链表是否为空,头指针均不为空
22、。为空。3/24/202221例题解析 【例例2】设顺序表设顺序表va中的数据元素递增有序。试设计一个算法,将中的数据元素递增有序。试设计一个算法,将x插入插入到顺序表的适当位置上,以保持该表的有序性。到顺序表的适当位置上,以保持该表的有序性。答:答:void Insert_SqList(SqList va, int x) /*把把x插入递增有序表插入递增有序表va中中*/ int i; if (va.length MAXSIZE) return; for (i=va.length-1; va.elemix & i=0; i-) va.elemi+1=va.elemi; va.elemi+1=
23、x; va.length+;/*Insert_SqList*/ 3/24/2022221. #define MAXSIZE 100 2. typedef struct 3. ElemType *elem; 4.int length;5. SqList;例题解析【例例3】设单链表结点指针域为设单链表结点指针域为 next,试写出删除链,试写出删除链表中指针表中指针 p 所指结点的直接后继的所指结点的直接后继的 C 语言语句。语言语句。答:答: q = p-next; p-next = q-next; free(q);3/24/202223例题解析【例例4】设单链表中某指针设单链表中某指针 p 所
24、指结点(即所指结点(即 p 结点)结点)的数据域为的数据域为 data,链指针域为,链指针域为 next,请写出在,请写出在 p 结点之前插入结点之前插入 s 结点的操作。结点的操作。答:答:设单链表的头结点的头指针为设单链表的头结点的头指针为head,且且pre=head; while (pre-next != p) pre=pre-next; s-next = p; pre-next=s;3/24/202224例题解析【例例5】试编写在带头结点的单链表中删除(一个)最小值结点的算法。试编写在带头结点的单链表中删除(一个)最小值结点的算法。void delete(Linklist &L)答:
25、答:题目分析题目分析 本题要求在单链表中删除最小值结点。单链表中删除结点,为使结点删除后不出本题要求在单链表中删除最小值结点。单链表中删除结点,为使结点删除后不出现现“断链断链”,应知道被删结点的前驱。而,应知道被删结点的前驱。而“最小值结点最小值结点”是在遍历整个链表后才能知道。所是在遍历整个链表后才能知道。所以算法应首先遍历链表,求得最小值结点及其前驱。遍历结束后再执行删除操作。以算法应首先遍历链表,求得最小值结点及其前驱。遍历结束后再执行删除操作。 void delete(LinkedList &L) L是带头结点的单链表是带头结点的单链表 p = L-next; p为工作指针。指向待处
展开阅读全文