数据结构复习课.ppt
《数据结构复习课.ppt》由会员分享,可在线阅读,更多相关《数据结构复习课.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构复习课数据结构复习课第一章第一章基本概念与算法基础基本概念与算法基础一、学习要求:一、学习要求:理解关于数据结构的名词术语;理解关于数据结构的名词术语;理解算法描述方式;理解算法描述方式;掌握算法时间复杂度和辅助空间的概念;掌握算法时间复杂度和辅助空间的概念;掌握时间复杂度的计算。掌握时间复杂度的计算。二、数据结构概念:二、数据结构概念:1、数据:数据是指能够输入到计算机中,并被计算机识别、数据:数据是指能够输入到计算机中,并被计算机识别和处理的符号的集合。和处理的符号的集合。2、数据结构:是存在一种或多种特定关系的数据元素间的、数据结构:是存在一种或多种特定关系的数据元素间的逻辑结构
2、和存储结构关系以及在其上的运算的集合。逻辑结构和存储结构关系以及在其上的运算的集合。3、数据结构的三个方面:数据的逻辑结构,数据的存贮结构和对数据所施、数据结构的三个方面:数据的逻辑结构,数据的存贮结构和对数据所施加的运算。这三个方面的关系为:加的运算。这三个方面的关系为:(1)数据的逻辑结构独立于计算机,是数据本身所固有的。)数据的逻辑结构独立于计算机,是数据本身所固有的。(2)存贮结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。)存贮结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。(3)运算是指所施加的一组操作总称。运算的定义直接依赖于逻辑结构,)运算是指所施加的一组操作总
3、称。运算的定义直接依赖于逻辑结构,但运算的实现必依赖于存贮结构。但运算的实现必依赖于存贮结构。4、从逻辑结构划分数据结构从逻辑结构划分数据结构数据结构从逻辑结构划分为:数据结构从逻辑结构划分为:(1)线性结构(线性表、栈、队列、字串,数组)线性结构(线性表、栈、队列、字串,数组)元元素素之之间间为为一一对对一一的的线线性性关关系系,第第一一个个元元素素无无直直接接前前驱驱,最最后后一一个个元元素素无无直接后继,其余元素都有一个直接前驱和直接后继。直接后继,其余元素都有一个直接前驱和直接后继。(2)非线性结构(树、堆、图(网络),)非线性结构(树、堆、图(网络),)元素之间为一对多或多对多的非线
4、性关系,每个元素有多个直接前驱或多元素之间为一对多或多对多的非线性关系,每个元素有多个直接前驱或多个直接后继。个直接后继。5 5 从存贮结构划分数据结构从存贮结构划分数据结构数据结构从存贮结构划分为:数据结构从存贮结构划分为:(1)(1)顺序存贮(向量存贮)顺序存贮(向量存贮)所有元素存放在一片连续的存贮单元中,逻辑上相邻的元素存放到计算机内所有元素存放在一片连续的存贮单元中,逻辑上相邻的元素存放到计算机内存仍然相邻。存仍然相邻。(2)(2)链式存贮链式存贮所有元素存放在可以不连续的存贮单元中,但元素之间的关系可以通过地址所有元素存放在可以不连续的存贮单元中,但元素之间的关系可以通过地址确定,
5、逻辑上相邻的元素存放到计算机内存后不一定是相邻的。确定,逻辑上相邻的元素存放到计算机内存后不一定是相邻的。(3)(3)索引存贮索引存贮使使用用该该方方存存放放元元素素的的同同时时,还还建建立立附附加加的的索索引引表表,索索引引表表中中的的每每一一项项称称为为索索引引项项,索索引引项项的的一一般般形形式式是是:(关关键键字字,地地址址),其其中中的的关关键键字字是是能能唯唯一一标标识一个结点的那些数据项。识一个结点的那些数据项。(4)(4)散列存贮散列存贮通过构造散列函数,用函数的值来确定元素存放的地址。通过构造散列函数,用函数的值来确定元素存放的地址。6 6、抽抽象象数数据据类类型型:用用户户
6、在在数数据据类类型型基基础础上上自自己己定定义义和和实实现现的的数数据据类类型型。在在更高一级的抽象程度上实现了信息的隐藏和封装。更高一级的抽象程度上实现了信息的隐藏和封装。三、算法:三、算法:1、算法的概念算法的概念(algorithm)通通俗俗地地讲讲,算算法法就就是是一一种种解解题题的的方方法法。更更严严格格地地说说,算算法法是是由由若若干干条条指指令令组组成成的的有有穷穷序序列列,它它必必须须满满足足下下述述条条件件(也也称称为算法的五大特性):为算法的五大特性):(1)输输入入:具具有有0个个或或多多个个输输入入的的外外界界量量(算算法法开开始始前前的的初初始量)始量)(2)输输出出
7、:至至少少产产生生一一个个输输出出,它它们们是是算算法法执执行行完完后后的的结结果。果。(3有穷性:算法的执行步骤必须是有限的。有穷性:算法的执行步骤必须是有限的。(4)确定性:每条指令的含义都必须明确,无二义性。确定性:每条指令的含义都必须明确,无二义性。(5)有效性:每条指令必须是可执行的。有效性:每条指令必须是可执行的。2 2算法和程序的关系算法和程序的关系算法的含义与程序十分相似,但二者是有区别的。一个程序算法的含义与程序十分相似,但二者是有区别的。一个程序不一定满足有穷性(死循环),另外,程序中的指令必须是不一定满足有穷性(死循环),另外,程序中的指令必须是机器可执行的,而算法中的指
8、令则无此限制。一个算法若用机器可执行的,而算法中的指令则无此限制。一个算法若用计算机语言来书写,则它就可以是一个程序。计算机语言来书写,则它就可以是一个程序。3、算法描述、算法描述(1 1)用流程图描述算法用流程图描述算法一一个个算算法法可可以以用用流流程程图图的的方方式式来来描描述述,输输入入输输出出、判判断断、处处理理分分别别用用不不同同的的框框图图表表示示,用用箭箭头头表表示示流流程程的的流流向向。这这是是一一种种描描述述算算法法的的较较好好方方法法,目目前前在在一一些些高高级级语语言言程程序序设设计计中中仍仍然采用。然采用。(2 2)用自然语言描述算法用自然语言描述算法用我们日常生活中
9、的自然语言(可以是中文形式,也可以是用我们日常生活中的自然语言(可以是中文形式,也可以是英形式)也可以描述算法。英形式)也可以描述算法。(3 3)用其它方式描述算法用其它方式描述算法我们还可以用数学语言或约定的符号语言来描述算法。我们还可以用数学语言或约定的符号语言来描述算法。(4 4)用用C+C+描述算法描述算法在在本本教教材材中中,我我们们将将采采用用C C或或类类C+C+来来描描述述算算法法。函数类型函数类型 函数名(形参及类型说明)函数名(形参及类型说明)函数语句部分函数语句部分return(return(表达式值表达式值);4 4、算法分析、算法分析(1 1)时间复杂度时间复杂度一个
10、算法花费的时间与算法中语句的执行次数成正比例,一个一个算法花费的时间与算法中语句的执行次数成正比例,一个算法中的语句执行次数称为语句频度或时间频度。记为算法中的语句执行次数称为语句频度或时间频度。记为T(n)T(n),n称为问题的规模,当称为问题的规模,当n不断变化时,时间频度不断变化时,时间频度T(n)也会不断变也会不断变化化。设设T(n)的一个辅助函数为的一个辅助函数为g(n),定义为当定义为当n大于等于某一足够大大于等于某一足够大的正整数的正整数n0时,存在两个正的常数时,存在两个正的常数A和和B(其中其中AB),),使得使得AT(n)/g(n)B均成立,则称均成立,则称g(n)是是T(
11、n)的同数量级函数。把的同数量级函数。把T(n)表示成数量级的形式为:表示成数量级的形式为:T(n)=(g(n),其中大写字母其中大写字母为英文为英文Order(即数量级)一词的第一个字母。即数量级)一词的第一个字母。在各种不同算法中,若算法中语句执行次数为一个常数,则在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度另外,在时间频度不相同时,时间复杂度有可能相同,如有可能相同,如T(n)=n2+3n+4与与T(n)=4n2+2n+1它们的频度不它们的频度不同,但时间复杂度相同,都为同,但时间复杂度相同,都为O(n2)。按
12、数量级递增排列,常见的时间按数量级递增排列,常见的时间复杂度有:复杂度有:常数阶常数阶O(1),对数阶对数阶O(log2n),线性阶线性阶O(n),线性对数阶线性对数阶O(nlog2n),平方阶平方阶O(n2),立方阶立方阶O(n3),.,k次次方方阶阶O(nk),指指数数阶阶O(2n)。随随着着问问题题规规模模n的的不不断断增增大大,上上述时间复杂度不断增大,算法的执行效率越低。述时间复杂度不断增大,算法的执行效率越低。算法的时间复杂度应是数据元素最坏情况下取值的时间复杂算法的时间复杂度应是数据元素最坏情况下取值的时间复杂度或数据元素等概率取值情况下的平均(或称期望)时间复度或数据元素等概率
13、取值情况下的平均(或称期望)时间复杂度。杂度。(2)空间复杂度空间复杂度一个算法在执行时所占有的内存开销,称为空间频度,但我们一个算法在执行时所占有的内存开销,称为空间频度,但我们一般是讨论算法占用的辅助存储空间。一般是讨论算法占用的辅助存储空间。与时间复杂度类似,空间复杂度是指算法在计算机内执行时所与时间复杂度类似,空间复杂度是指算法在计算机内执行时所占用的内存开销规模。但我们一般所讨论的是除正常占用内存占用的内存开销规模。但我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。讨论方法与时间复杂度类似。开销外的辅助存储单元规模。讨论方法与时间复杂度类似。例题分析:例题分析:1、数据结构
14、是研究数据的、数据结构是研究数据的_和和_,以及它,以及它们之间的相互关系,并对这种结构定义相应的们之间的相互关系,并对这种结构定义相应的_,设计出相应的设计出相应的_,而确保经过这些运算后所得到的,而确保经过这些运算后所得到的新结构是新结构是_结构类型。结构类型。2、选择某种问题的最佳数据结构的标准是什么?、选择某种问题的最佳数据结构的标准是什么?答:通常有两条标准:即算法所需的时间量和算法所需的存答:通常有两条标准:即算法所需的时间量和算法所需的存储空间量。所需的书简涉及以下几个因素储空间量。所需的书简涉及以下几个因素(1)程序运行时)程序运行时所需输入的数据总量;(所需输入的数据总量;(
15、2)对原程序进行编译所需的时间;)对原程序进行编译所需的时间;(3)计算机执行每条指令所需的时间;()计算机执行每条指令所需的时间;(4)程序中的指令)程序中的指令重复执行的次数。重复执行的次数。3、按增长率由小到大的序列排列以下的各函数:、按增长率由小到大的序列排列以下的各函数:逻辑结构存储结构运算算法原来的解:各函数由小到大的顺序是:解:各函数由小到大的顺序是:4、计算给定算法的时间复杂度、计算给定算法的时间复杂度第二章第二章线性表线性表一、学习要求:一、学习要求:掌握线性表的逻辑结构、存储结构及描述方法;掌握线性表的逻辑结构、存储结构及描述方法;熟悉、掌握并写出顺序表和链表的插入、删除结
16、点的算法,熟悉、掌握并写出顺序表和链表的插入、删除结点的算法,分析时间复杂度。分析时间复杂度。二、线性表的概念:二、线性表的概念:1 1、定义:、定义:线性表(线性表(linear listlinear list)是是n n(n0n0)个数据元素个数据元素a a1 1,a a2 2,aan n组成的有限序列。其中组成的有限序列。其中n n 称为数据元素的个数或线性表的长称为数据元素的个数或线性表的长度,当度,当n=0n=0时称为空表,时称为空表,n0n0时称为非空表。时称为非空表。2 2、线性表的特征、线性表的特征从线性表的定义可以看出线性表的特征:从线性表的定义可以看出线性表的特征:(1)有
17、且仅有一个开始结点有且仅有一个开始结点(表头结点表头结点)a1,它没有直接前它没有直接前驱,只有一个直接后继驱,只有一个直接后继;(2)有且仅有一个终端结点有且仅有一个终端结点(表尾结点表尾结点)an,它没有直接后继,它没有直接后继,只有一个直接前驱只有一个直接前驱;(3)其它结点都有一个直接前驱和直接后继;其它结点都有一个直接前驱和直接后继;(4)元素之间为一对一的线性关系。)元素之间为一对一的线性关系。3、线性表的存储结构、线性表的存储结构(1)顺序表结构)顺序表结构(用数组存储)(用数组存储)线性表的顺序存储结构线性表的顺序存储结构,也称为顺序表。其存储方式为:在内存也称为顺序表。其存储
18、方式为:在内存中开辟一片连续存储空间,但该连续存储空间的大小要大于或中开辟一片连续存储空间,但该连续存储空间的大小要大于或等于顺序表的长度,然后让线性表中第一个元素存放在连续存等于顺序表的长度,然后让线性表中第一个元素存放在连续存储空间第一个位置,第二个元素紧跟着第一个之后,其余依此储空间第一个位置,第二个元素紧跟着第一个之后,其余依此类推。类推。(2)线性表的链式存贮结构)线性表的链式存贮结构线性表的链式存贮结构,也称为链表。其存贮方式是:在内线性表的链式存贮结构,也称为链表。其存贮方式是:在内存中利用存贮单元存中利用存贮单元(可以不连续可以不连续)来存放元素值及它在内存的来存放元素值及它在
19、内存的地址,各个元素的存放顺序及位置都可以以任意顺序进行,地址,各个元素的存放顺序及位置都可以以任意顺序进行,原来相邻的元素存放到计算机内存后不一定相邻,从一个元原来相邻的元素存放到计算机内存后不一定相邻,从一个元素找下一个元素必须通过地址素找下一个元素必须通过地址(指针指针)才能实现。故不能像顺才能实现。故不能像顺序表一样可随机访问,而只能按顺序访问。常用的链表有序表一样可随机访问,而只能按顺序访问。常用的链表有单单链表链表、循环链表和双向链表等。、循环链表和双向链表等。线性链表中的结点结构为:线性链表中的结点结构为:其中其中data域用来存放结点本身信息,类型由具体问题而定,域用来存放结点
20、本身信息,类型由具体问题而定,next域用来存放下一个元素地址。域用来存放下一个元素地址。4、线性表的插入和删除运算、线性表的插入和删除运算(C+程序)程序)(1)在顺序存储结构下的插入和删除运算及时间复杂度)在顺序存储结构下的插入和删除运算及时间复杂度在等概率下平均移动元素的次数为:在等概率下平均移动元素的次数为:(2)在链式存储结构下的运算)在链式存储结构下的运算在单链表的插入和删除运算中,只需改变两个结点的指针域在单链表的插入和删除运算中,只需改变两个结点的指针域即可,不需移动结点。即可,不需移动结点。因此二者的时间复杂度都为因此二者的时间复杂度都为O(1).因此二者的时间复杂度都为因此
21、二者的时间复杂度都为O(n).(3)在线性表中查找某个元素的时间复杂度:在线性表中查找某个元素的时间复杂度:在顺序存储结构中为:在顺序存储结构中为:O(1);在链式存储结构中为:在链式存储结构中为:O(n).例题分析:例题分析:1、将两个各有、将两个各有n个元素的有序表归并成一个有序表。其最个元素的有序表归并成一个有序表。其最少的比较次数为(少的比较次数为()。)。2、在有、在有n个元素的线性表中,可删除的元素有(个元素的线性表中,可删除的元素有()个,)个,可插入元素的位置有(可插入元素的位置有()个)个nnn+13、设、设A是一个线性表(是一个线性表(a1,a2,a3,.an),采用顺序存
22、储结构,采用顺序存储结构,则在等概率的前提下,平均每插入一个元素需要移动的元则在等概率的前提下,平均每插入一个元素需要移动的元素个数为多少?若元素插在素个数为多少?若元素插在ai与与ai+1之间(之间(0=i=n-1)的概的概率为(率为(n-i)/(n(n+1)/2),平均每插入一个元素所需要移动的平均每插入一个元素所需要移动的元素个数是多少?元素个数是多少?解:在等概率的前提下,平均每插入一个元素所需要移解:在等概率的前提下,平均每插入一个元素所需要移动的元素个数为:动的元素个数为:(0+1+2+.+n)/(n+1)=n/2;若元素插在若元素插在ai与与ai+1之间(之间(0=i=n-1)的
23、概率为的概率为(n-i)/(n(n+1)/2),平均每插入一个元素所需要移动的元平均每插入一个元素所需要移动的元素个数是:素个数是:n-1(n-i)2/(n(n+1)/2)=(2n+1)/3i=0第三章第三章栈和队列(操作受限的线性表)栈和队列(操作受限的线性表)学习要求:学习要求:掌握栈和队列的逻辑定义、描述方法及其特性;掌握栈和队列的逻辑定义、描述方法及其特性;理解循环队列判空和判满的方法;理解循环队列判空和判满的方法;栈和队列基本运算的算法实现,以及栈在实现递归过程中栈和队列基本运算的算法实现,以及栈在实现递归过程中的作用。的作用。一、栈的定义和基本运算一、栈的定义和基本运算1、栈的定义
24、:后进先出表、栈的定义:后进先出表2、栈的基本运算、栈的基本运算(1)置空栈:)置空栈:s=NULL;(2)判栈空判栈空empty(s):top=NULL;(3)入栈入栈push(s,x);(4)出栈出栈pop(s)(5)读栈顶元素读栈顶元素top(s).3、栈的存储结构、栈的存储结构(1)、顺序栈:即栈的顺序存储结构,是利用一组地址连)、顺序栈:即栈的顺序存储结构,是利用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素,同时附设续的存储单元依次存储自栈顶到栈底的数据元素,同时附设top指针指示栈顶元素在顺序栈中的位置。指针指示栈顶元素在顺序栈中的位置。利用栈底位置相对不变的特性,两个顺序
25、栈可以共享一个一利用栈底位置相对不变的特性,两个顺序栈可以共享一个一维数据空间,以互补余缺。具体实现时可以将两个栈的栈底维数据空间,以互补余缺。具体实现时可以将两个栈的栈底分别设在空间的两端,让它们的栈顶各自向中间延伸。分别设在空间的两端,让它们的栈顶各自向中间延伸。(2)、链栈:可以克服顺序栈所带来的大量数据元素移动)、链栈:可以克服顺序栈所带来的大量数据元素移动的不足。链栈中头指针就是栈顶指针。的不足。链栈中头指针就是栈顶指针。4、栈的应用:表达式求值、括号匹配、递归调用,即将递、栈的应用:表达式求值、括号匹配、递归调用,即将递归过程转变为非递归过程。归过程转变为非递归过程。二、队列的定义
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习
限制150内