版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构全册配套最完整精品课件32021-10-122021-10-12数据结构2数据结构数据结构 2021-10-12数据结构3教材教材:严蔚敏,吴伟民:严蔚敏,吴伟民:数据结构数据结构,第三版,第三版,清华大学出版社,清华大学出版社,1992年年课程安排:课程安排:总总18周,授课周,授课16周,最后两周考核周,最后两周考核预备知识:预备知识:熟练掌握熟练掌握C或或C+语言,尤其是语言,尤其是指针指针和和类类2021-10-12数据结构4学习网址:学习网址:1、视频、视频 http:/ Williaw Ford et al.Data Structures with C+.Prentice
2、Hall Inc.,19962 数据结构数据结构刘大有等刘大有等高教出版社高教出版社2021-10-12数据结构5开设和学习本课程的意义所在:n生产方式的变革:材料、能源、信息;材料和能源的迅速减少,使得人们最终将开发和应用的重点日益转向到信息中来;n人们必须更加集约地利用地球上有限的物质资源,同时,必须掌握更加有效的加工自然物手段 高新技术;n信息技术(Information Technology,简称IT)一直处于高新技术的核心地位;2021-10-12数据结构6计算机硬件技术计算机软件技术计算机通信技术数据的组成常用的算法软件设计和开发软件的实现原理和技术IT计算机软件技术数据的组成常用
3、的算法软件的实现原理和技术2021-10-12数据结构7n加强“每一种数据结构都存在代价与效益”的概念。n学习一些最基本、最常用的数据结构。n它们组成了一个程序员的基本数据结构工具箱(toolkit)。n掌握如何评估一个数据结构和算法的有效性。n这些技术也使程序员能够判断自己或别人发明的新数据结构的价值。2021-10-12数据结构8 什么是数据结构 为什么要学习数据结构 如何评价一个算法2021-10-12数据结构9科学计算科学计算-非数值计算非数值计算数值数值-结构数据结构数据随着社会的发展,计算机应用的范围已经深入到社会的各个领域,计算机的应用已经不在局限于科学计算,而是更多用于控制、管
4、理及数据处理等非数值计算。相应的计算机加工处理的对象由纯粹的数值发展到字符、表格和图像等具有一定结构的数据。为了编写一个好程序,必须分析待处理对象的特性以及各处理对象之间存在的关系。2021-10-12数据结构10n数据结构是介于数据结构是介于数学、计算机硬件和计算机软件数学、计算机硬件和计算机软件三者三者之间的一门核心课程。之间的一门核心课程。2021-10-12数据结构11n1、算法和数据结构是计算机科学的两大支柱、算法和数据结构是计算机科学的两大支柱n计算机科学早期定义为:研究算法的科学计算机科学早期定义为:研究算法的科学n 近期定义为:研究数据的科学近期定义为:研究数据的科学n2、数据
5、结构是程序设计的基础、数据结构是程序设计的基础n3、是信息类学科的专业基础课程。、是信息类学科的专业基础课程。算法数据结构程序算法数据结构程序 程序设计的程序设计的实质实质是对实际问题选择一种好的数据结构,是对实际问题选择一种好的数据结构,加之设计一个好的算法,而好的算法在很大程度上取决加之设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构于描述实际问题的数据结构2021-10-12数据结构121、掌握各类基本数据结构类型和相应的存储结构、掌握各类基本数据结构类型和相应的存储结构2、提高阅读和编写算法的能力、提高阅读和编写算法的能力3、能针对给定问题,选择相适应的数据结构,并
6、能、能针对给定问题,选择相适应的数据结构,并能设计和分析算法。设计和分析算法。2021-10-12数据结构13n众所周知,计算机的程序是对信息进众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就之间往往具有重要的结构关系,这就是数据结构的内容。那么,什么是数是数据结构的内容。那么,什么是数据结构呢?先看以下几个例子据结构呢?先看以下几个例子。2021-10-12数据结构14例例1、电话号码查询系统、电话号码查询系统n 设有一个电话号码薄,它记录了设有一个
7、电话号码薄,它记录了N个人的个人的名字和其相应的电话号码,假定按如下形式安名字和其相应的电话号码,假定按如下形式安排:排:n (a1,b1)(a2,b2)(an,bn)n 其中其中ai,bi(i=1,2n) 分别表示某人的名分别表示某人的名字和对应的电话号码。要求设计一个算法,当字和对应的电话号码。要求设计一个算法,当给定任何一个人的名字时,该算法能够打印出给定任何一个人的名字时,该算法能够打印出此人的电话号码,如果该电话簿中根本就没有此人的电话号码,如果该电话簿中根本就没有这个人,则该算法也能够报告没有这个人的标这个人,则该算法也能够报告没有这个人的标志。志。2021-10-12数据结构15
8、姓名姓名 电话号码电话号码 张三张三 张林张林 . . . 张杰张杰 李四李四 . . . 李中李中 姓地址张李.例一:电话号码查询问题例一:电话号码查询问题电话号码查询问题的索引存储电话号码查询问题的索引存储2021-10-12数据结构16n算法的设计,依赖于计算机如何存储人的名字和对应算法的设计,依赖于计算机如何存储人的名字和对应的电话号码,或者说依赖于名字和其电话号码的结构。的电话号码,或者说依赖于名字和其电话号码的结构。n数据的结构,直接影响算法的选择和效率。数据的结构,直接影响算法的选择和效率。n上述的问题是一种数据结构问题。可将名字和对应的上述的问题是一种数据结构问题。可将名字和对
9、应的电话号码设计成:二维数组、表、向量。电话号码设计成:二维数组、表、向量。n假定名字和其电话号码逻辑上已安排成假定名字和其电话号码逻辑上已安排成N元向量的形元向量的形式,它的每个元素是一个数对式,它的每个元素是一个数对(ai,bi), 1inn数据结构还要提供每种结构类型所定义的各种运算的数据结构还要提供每种结构类型所定义的各种运算的算法算法2021-10-12数据结构17数据结构研究的内容(contd)n图书目录文件示例图书目录文件示例001高等数学樊映川S01002理论力学罗远祥L01003高等数学华罗庚S01004线性代数栾汝书S02高等数学001,003,理论力学002,线性代数00
10、4,樊映川001,华罗庚 003,栾汝书 004,L002,S001,003,2021-10-12数据结构18数据结构的定义数据结构的定义 通过以上例子可以直接认为:通过以上例子可以直接认为: 数据结构是一门研究非数值计算的程序设计问题中计算机的数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象操作对象以及它以及它们之间们之间关系和操作关系和操作等的学科。等的学科。 研究内容:研究内容:1、数据结构是研究数据的逻辑结构和物理结构以及它们之间相互关系、数据结构是研究数据的逻辑结构和物理结构以及它们之间相互关系2、并对每种结构定义相适应的各种运算、并对每种结构定义相适应的各种运算3、设计
11、出相应的算法、设计出相应的算法4、分析算法的效率、分析算法的效率2021-10-12数据结构19一、术语一、术语 是信息的载体,能被计算机识别、存储、加工处理。是信息的载体,能被计算机识别、存储、加工处理。 数据的基本单位数据的基本单位, 即数据集合中的一个个体。也称即数据集合中的一个个体。也称元素元素、结点结点、顶点顶点、记录记录是具有独立含义的是具有独立含义的最小最小标识单位标识单位唯一唯一能识别一个数据元素的能识别一个数据元素的数据项数据项。数据元素由数据元素由组成组成2021-10-12数据结构20具有具有性质相同性质相同的数据元素的集合,是数据的子集。的数据元素的集合,是数据的子集。
12、例如:例如:数据集合数据集合D=0,1,。,。A,B,。,。Z正整数正整数N=0,1,字符字符C=A,B,Z2021-10-12数据结构21 按某种按某种组织起来的一批数据组织起来的一批数据, ,应用计应用计算机语言按一定的算机语言按一定的将其将其在计算机中在计算机中, ,在这些数据上定义了若干基本在这些数据上定义了若干基本, ,并且讨论这并且讨论这些基本些基本基于存储方式上基于存储方式上。这种逻辑关系称为结构。常见结构:这种逻辑关系称为结构。常见结构:1 1、集合、集合2 2、线性结构(、线性结构(1 1对对1 1)3 3、树形结构;(、树形结构;(1 1对多)对多)4 4、图状结构或网状结
13、构。(多对多)、图状结构或网状结构。(多对多)2021-10-12数据结构22n数据结构的形式定义为:数据结构是一个二元组:数据结构的形式定义为:数据结构是一个二元组:nData-Structure=(D,S)n其中:其中:D是数据元素的有限集,是数据元素的有限集,S是是D上关系的有限集。上关系的有限集。n例例 复数的数据结构定义如下:复数的数据结构定义如下:nComplex=(C,R)n其中:其中:C是含两个实数的集合是含两个实数的集合C1,C2,分别表示,分别表示复数的实部和虚部。复数的实部和虚部。R=P,P是定义在集合上的一种是定义在集合上的一种关系关系C1,C2。n数据结构在计算机中的
14、表示称为数据的物理结构,又数据结构在计算机中的表示称为数据的物理结构,又称为存储结构。称为存储结构。2021-10-12数据结构23n数据对象可以是有限的,也可以是无限数据对象可以是有限的,也可以是无限的。的。n数据结构不同于数据类型,也不同于数数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间对象,而且要描述数据对象各元素之间的相互关系。的相互关系。2021-10-12数据结构24 是具有相同性质的计算机数据的集合及在这个是具有相同性质的计算机数据的集合及在这个集合上的一组操作。按数据的不同特性:集合上的一
15、组操作。按数据的不同特性:2021-10-12数据结构25n例例1、 在在FORTRAN语言中,语言中,n 变量的数据类型有整型、实型、和复数型变量的数据类型有整型、实型、和复数型n例例2、在、在C语言中语言中n 数据类型:基本类型和构造类型数据类型:基本类型和构造类型n 基本类型:整型、浮点型、字符型基本类型:整型、浮点型、字符型n 构造类型:数组、结构、联合、指针、枚举型、自定构造类型:数组、结构、联合、指针、枚举型、自定义义n在某种意义上,数据结构可以看成是在某种意义上,数据结构可以看成是“一组具有相同结构的一组具有相同结构的值值”,而结构类型可以看成由,而结构类型可以看成由一种数据结构
16、一种数据结构和定义在其上的和定义在其上的一组操作一组操作组成。组成。2021-10-12数据结构26n“抽象抽象”的意义在于数据类型的数学抽象特性的意义在于数据类型的数学抽象特性n一个数学模型以及定义在该模型上的一组操作。一个数学模型以及定义在该模型上的一组操作。(ADT的定义仅取决于它的一组逻辑特性,而与其在的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。)计算机内部如何表示和实现无关。)n抽象数据类型实际上就是对该数据结构的定义。因为抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此结构上的一组它定义了一个数据的逻辑结构以及在此结构上的一
17、组算法。算法。n一个含抽象数据类型的软件模块应包括一个含抽象数据类型的软件模块应包括定义、表示和定义、表示和实现实现3个部分个部分n 用三元组描述如下:用三元组描述如下:n (,)(,)D是数据对象,是数据对象,S是是D上的关系集,上的关系集,P是对是对D的操作集的操作集2021-10-12数据结构27格式:ADT抽象数据类型名数据对象:数据关系:基本操作:ADT抽象数据类型名基本操作定义格式:基本操作名(参数表)初始条件:操作结果:2021-10-12数据结构28数据结构包括四方面的内容数据结构包括四方面的内容: 数据的逻辑结构数据的逻辑结构 数据的存储结构数据的存储结构 逻辑结构上的基本运
18、算逻辑结构上的基本运算 存储结构上基本运算的实现存储结构上基本运算的实现2021-10-12数据结构29数据的逻辑结构数据的逻辑结构 指的是数据之间的逻辑关系,其独立于具体指的是数据之间的逻辑关系,其独立于具体的计算机,为具体问题抽象出来的数学模型的计算机,为具体问题抽象出来的数学模型。(1)线性结构)线性结构(2)非线性结构)非线性结构特征:一个结点可能有多个直接前趋和直接后继特征:一个结点可能有多个直接前趋和直接后继。 特征:仅有一个开始结点和一个终端结点,并且特征:仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后继所有结点都最多只有一个直接前趋和一个直接后继
19、。逻辑结构的分类逻辑结构的分类:2021-10-12数据结构30数据结构包括四方面的内容数据结构包括四方面的内容: 数据的逻辑结构数据的逻辑结构 数据的存储结构数据的存储结构 逻辑结构上的基本运算逻辑结构上的基本运算 存储结构上基本运算的实现存储结构上基本运算的实现2021-10-12数据结构31 指的是数据的逻辑结构在计算机中的存储实现,指的是数据的逻辑结构在计算机中的存储实现,其依赖于具体的计算机语言其依赖于具体的计算机语言。数据的逻辑结构和物理结构是密切联数据的逻辑结构和物理结构是密切联系的两个方面,任何一个算法的系的两个方面,任何一个算法的设计设计取决于选定的数据(逻辑)结构,而取决于
20、选定的数据(逻辑)结构,而算法的算法的实现实现依赖于采用的存储结构依赖于采用的存储结构2021-10-12数据结构32(1)顺序存储方法)顺序存储方法 将逻辑上相邻的结点存储在物理位置上相邻的将逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。采用顺序存储方法所得到的存储表示关系来体现。采用顺序存储方法所得到的存储表示称为称为顺序存储结构顺序存储结构。(2)链接存储方法)链接存储方法 不要求逻辑上相邻的结点在物理位置上亦相不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由存储结点时附加的指针邻,结
21、点间的逻辑关系由存储结点时附加的指针字段表示。采用链接存储方法所得到的存储表示字段表示。采用链接存储方法所得到的存储表示称为称为链式存储结构链式存储结构。2021-10-12数据结构33(4)散列存储方法)散列存储方法 根据结点的关键字直接计算出该结点的存储地根据结点的关键字直接计算出该结点的存储地址,以实现对结点的存储和访问址,以实现对结点的存储和访问。 在存储结点信息的同时,还建立附加的索引表,索引在存储结点信息的同时,还建立附加的索引表,索引表中的每一项称为索引项,其一般形式为:(关键字,地表中的每一项称为索引项,其一般形式为:(关键字,地址)。址)。(3)索引存储方法)索引存储方法20
22、21-10-12数据结构34数据结构包括四方面的内容数据结构包括四方面的内容: 数据的逻辑结构数据的逻辑结构 数据的存储结构数据的存储结构 逻辑结构上的基本运算逻辑结构上的基本运算 存储结构上基本运算的实现存储结构上基本运算的实现2021-10-12数据结构35 每种逻辑结构都涉及到一些基本运算,这些每种逻辑结构都涉及到一些基本运算,这些基本运算实际上是基本运算实际上是定义定义在抽象的数据上的一系列在抽象的数据上的一系列操作。操作。最常用的运算有:检索、插入、删除、更最常用的运算有:检索、插入、删除、更新、排序等。新、排序等。2021-10-12数据结构36数据结构包括四方面的内容数据结构包括
23、四方面的内容: 数据的逻辑结构数据的逻辑结构 数据的存储结构数据的存储结构 逻辑结构上的基本运算逻辑结构上的基本运算 存储结构上基本运算的实现存储结构上基本运算的实现2021-10-12数据结构37 运算的实现实际上指的是采用怎样的步骤或运算的实现实际上指的是采用怎样的步骤或方法去实现定义在逻辑结构上的运算的功能。方法去实现定义在逻辑结构上的运算的功能。2021-10-12数据结构38例例:计算机系学员的选课、业余爱好、担当职务情计算机系学员的选课、业余爱好、担当职务情况统计如下:况统计如下:学号学号选修课程选修课程爱好爱好职务职务1B.F无无班长班长2A.C体育体育3A.D.F体育体育体委体
24、委4D.E文艺文艺5C.E文艺文艺6D.F体育体育7B.E体育体育8A.E体育体育9B.F文艺文艺文委文委10B.D文艺文艺2021-10-12数据结构39学号学号选修课程选修课程爱好爱好职务职务1B.F无无班长班长2A.C体育体育3A.D.F体育体育体委体委4D.E文艺文艺5C.E文艺文艺6D.F体育体育7B.E体育体育8A.E体育体育9B.F文艺文艺文委文委10B.D文艺文艺建立数据元素之间的逻辑结构建立数据元素之间的逻辑结构:1 1。按学号顺序建立并表示。按学号顺序建立并表示该集合的关系该集合的关系1 2 3 4 5 6 7 8 9 10线性结构:线性表线性结构:线性表2。按职务和爱好建
25、立关系。按职务和爱好建立关系1 2396 784 5 10非线性结构:树非线性结构:树2021-10-12数据结构402、存储结构、存储结构线性表线性表1、逻辑结构、逻辑结构a1+9顺序表顺序表 a1a1+1a1+212 3 10 a10链表链表 a112 3 10 a2a32021-10-12数据结构412、存储结构、存储结构树树1、逻辑结构、逻辑结构a1+9顺序存储顺序存储 a1a1+1a1+213 910 -1a1a1a1+2链式存储链式存储 3 9 1 2 . 10 1 2396 784 5 102021-10-12数据结构423、数据的运算:退学、数据的运算:退学 插班插班 查看查看
26、 删除删除插入插入查找查找4、运算的实现:、运算的实现:a1+9a1a1+1a1+212 310 a12 3 10 a2a3a1012021-10-12数据结构434、运算的实现:、运算的实现:3、数据的运算:退学、数据的运算:退学 插班插班 查看查看 删除删除插入插入查找查找a1+9a1a1+1a1+212 310 a1+9a12 3 10 a2a3a1012021-10-12数据结构44说明:说明:同一批数据可以抽象出不同的逻辑结构同一批数据可以抽象出不同的逻辑结构同一逻辑结构采用不同的存储方法,可以得同一逻辑结构采用不同的存储方法,可以得到不到不 同的存储结构,并冠以不同的名称;同的存储
27、结构,并冠以不同的名称;存储方法可以单独使用,也可以结合起来使存储方法可以单独使用,也可以结合起来使用;用;数据结构的逻辑结构、存储结构、运算三个数据结构的逻辑结构、存储结构、运算三个方面是一个整体;方面是一个整体;运算是数据结构的重要方面运算是数据结构的重要方面2021-10-12数据结构45 逻辑结构上定义的定义的基本运算在存储结构上的实现是通过算法来描述的。一、算法定义一、算法定义 算法(算法(algorithm)是对特定问题求解步骤的一种描述,由有限的指令序列构成,其中每一条指令表示一个或多个操作。2021-10-12数据结构46 二、算法应具有的五个特性二、算法应具有的五个特性:(1
28、)输入)输入(Input) 一个算法有零个或多个的输入,它们一个算法有零个或多个的输入,它们是算法开始前给出的最初量。是算法开始前给出的最初量。(2)输出)输出(Output) 一个算法至少有一个输出,它们是同输入一个算法至少有一个输出,它们是同输入有某种关系的量有某种关系的量(3)有穷性)有穷性(Finite)算法执行有穷步运算后能够终止,且每一算法执行有穷步运算后能够终止,且每一步都可以在有穷时间内完成。步都可以在有穷时间内完成。(4)确定性)确定性(Definite )每一条指令必须有确切的含义,无二每一条指令必须有确切的含义,无二义性。相同输入只能产生相同输出。义性。相同输入只能产生相
29、同输出。(5)可行性)可行性(Effective) 每种运算都是相当基本的、行得通的,每种运算都是相当基本的、行得通的,原则上能精确实施。原则上能精确实施。 2021-10-12数据结构47一个算法可以用自然语言自然语言、数学语言数学语言或约定的符号语言约定的符号语言来描述。本书用C语言语言描述算法。四、算法描述四、算法描述三、算法与程序的关系三、算法与程序的关系区别区别:1、程序不一定满足有穷性、程序不一定满足有穷性2、程序中的指令必须是机器可执行的,算法中的指、程序中的指令必须是机器可执行的,算法中的指令则无此限制令则无此限制联系联系:算法用机器可执行的语言来书写,就变成一个程序。算法用机
30、器可执行的语言来书写,就变成一个程序。2021-10-12数据结构48一、算法评价五要素一、算法评价五要素 1、程序不包含语法错误;2、程序对于几组输入数据能够得出满足规格说明要求的结果3、程序对于精心选择的典型、苛刻而带有刁难性的几组数据都能产生满足规格说明要求的结果,4、程序对于一切合法输入数据都能产生满足规格说明要求的结果2021-10-12数据结构49二、算法运行时间二、算法运行时间 要素要素 (1)对源程序进行编译所需的时间)对源程序进行编译所需的时间(2)程序运行时所需数据输入的时间)程序运行时所需数据输入的时间(3)机器执行每条指令所需时间)机器执行每条指令所需时间(4)程序中的
31、每条指令重复执行的次数)程序中的每条指令重复执行的次数。 假设每条指令执行所需时间为单位时间。算法的时间耗费假设每条指令执行所需时间为单位时间。算法的时间耗费T(n)可以用可以用每条指令重复执行的次数每条指令重复执行的次数(也称语句频度(也称语句频度Frequency Count)之和进行度量,)之和进行度量,2021-10-12数据结构50例例1.4 求两个求两个n阶方阵的乘积阶方阵的乘积 C=AB,其算法描述如下:其算法描述如下: #define n 自然数自然数 matrixmlt(a,b,c) float an,bn,cn; int i,j,k; (1) for (i=0;in;i+)
32、 (2) for(j=0;jn;j+) (3) cij=0; (4) for(k=0;k=n0,都有都有T(n)=c.f(n)成立,成立,则则称称T的阶不高于的阶不高于f的阶的阶,并记作并记作T(n)=O(f(n)。该式表示随问题规模该式表示随问题规模n的增大,算法执行时间的增的增大,算法执行时间的增长率和长率和f(n)的增长率相同,称作算法的的增长率相同,称作算法的渐近时间复渐近时间复杂度杂度,简称,简称时间复杂度时间复杂度三、(渐进)时间复杂度三、(渐进)时间复杂度(O(f(n)2021-10-12数据结构53常见的时间复杂度有:常数阶常见的时间复杂度有:常数阶O(1)、对数阶对数阶O(l
33、og2n)、线性阶、线性阶O(n)、线性对数阶、线性对数阶O(n log2n)、平方阶平方阶O(n2)、 立方阶立方阶O(n3)、k次方阶次方阶O(nk)、指数阶、指数阶O(2n)。三、(渐进)时间复杂度三、(渐进)时间复杂度(O(f(n)2021-10-12数据结构54例一:交换例一:交换a和和b的内容的内容temp=a; a=b; b=temp;T(n)=O(1)2021-10-12数据结构55例二:变量记数之一例二:变量记数之一(1)x=0;y=0;(2)for(k=1;k=n;k+)(3)x+;(4)for(i=1;i=n;i+)(5)for(j=1;j=n;j+)(6)y+;频度最大
34、的语句是(频度最大的语句是(6),),且且f(n)=n 2,所以该程序段,所以该程序段的时间复杂度为的时间复杂度为T(n)=O(n 2)2021-10-12数据结构56例二:变量记数之二例二:变量记数之二(1)x=1;(2)for(i=1;i=n;i+)(3) for(j=1;j=i;j+)(4) for(k=1;k=j;k+)(5)x+;频度最大的语句是(频度最大的语句是(5),),且且f(n)=? 。 niijniniijjknOiij1113111)()1(1所以该程序段的时间复杂度所以该程序段的时间复杂度为为T(n)=O(n 3)2021-10-12数据结构57四、最坏时间复杂度和平均
35、时间复杂度四、最坏时间复杂度和平均时间复杂度很多算法的时间复杂度不仅仅是问题规模的函数,还与它所处理的数据集的状态有关,在这种情况下,通常是根据数据集中可能出现的最坏情况,估计出算法的最坏时间复杂度最坏时间复杂度。有时对数据集的分布作出某种假设(如等概率),讨论算法的平均时间复杂度平均时间复杂度。2021-10-12数据结构58例:例:在数组在数组An中查找值为中查找值为K的元素,若找到,则返回位置的元素,若找到,则返回位置I(0=I=0)&(AI!=K)(3)I-;(4) return I;最坏事件时间复杂度最坏事件时间复杂度T(n)=n 2021-10-12数据结构59五、空间复杂
36、度五、空间复杂度(Space Complexity) S(n): 算法所耗费的存储空间,仍是问题规模算法所耗费的存储空间,仍是问题规模n的函数。的函数。记作:记作:S(n)=O(f(n)2021-10-12数据结构601、掌握数据、数据元素、数据结构等基本概念。、掌握数据、数据元素、数据结构等基本概念。2、掌握数据逻辑结构和物理结构的分类。、掌握数据逻辑结构和物理结构的分类。3、学会算法分析的基本方法。、学会算法分析的基本方法。2021-10-12数据结构61习题n1、简述下列术语:数据、数据元素、数据对象、数据结构n2、判断以下算法A和B处语句的语句频度,并计算该算法的时间复杂度。nfor(
37、 i=1,in-1,i+)ny+,n for(j=0,j2n,j+)n x=x+1;n n2021-10-12数据结构62习题:n3、计算机算法指的是_nA、计算方法 B、排序方法nC、解决某一问题的有限指令序列nD、调度方法2021-10-12数据结构63 C语言语法结构简介语言语法结构简介 1. C程序是由函数构成的程序是由函数构成的2. 函数的组成函数的组成 函数说明部分函数说明部分:函数类型函数类型 函数名函数名( 形式参数表列形式参数表列 )函数体函数体: 变量说明部分变量说明部分 语句部分语句部分 int max ( x , y )函数类型函数类型函数名函数名形参表列形参表列形式参
38、数说明形式参数说明int x , y;形参类型形参类型形参形参 一个程序有且仅有一个一个程序有且仅有一个main函数函数是程函数函数是程序的基本单位,被调函数既可以是系统提供的库函序的基本单位,被调函数既可以是系统提供的库函数,也可以是自定义函数。数,也可以是自定义函数。一、函数形式一、函数形式2021-10-12数据结构64 3. 一个一个C程序总是从程序总是从main函数开始执行,而不论函数开始执行,而不论main在整个函数中的位置如何在整个函数中的位置如何 4. C程序书写格式自由,一行内可以写几个语句,程序书写格式自由,一行内可以写几个语句,一个语句也可以写在几行上一个语句也可以写在几
39、行上 5. 分号;是语句结束符,是语句的一部分分号;是语句结束符,是语句的一部分 6. 函数通常结束于函数通常结束于return语句。语句。2021-10-12数据结构65二、条件语句的两种格式二、条件语句的两种格式1. 1. 格式格式 1 1: if ( if ( 表达式表达式 ) ) 语句语句例例: if (a0) a=-a;: if (a0) a=-a; printf( printf(“a=%dna=%dn”,a);,a);2. 2. 格式格式 2 2: if ( if ( 表达式表达式 ) ) 语句语句 1 1 else else 语句语句 2 23. 3. 功能:功能: 把把( (
40、表达式表达式 ) )作为条件,根作为条件,根据其值真假选择所要执行的操作据其值真假选择所要执行的操作条件条件语句语句真真(非非0)假假(0)格式格式1 1条件条件语句语句1真真(非非0)假假(0)语句语句2格式格式22021-10-12数据结构661 1、whilewhile循环语句循环语句2 2)执行过程)执行过程: : 计算计算E E的值的值 若若E E非非0, 0, 则执行则执行S, S, 然后转然后转 若若E E为为0, 0, 则退出循环则退出循环, , 执行该循环后的语句执行该循环后的语句1 1)格式)格式 while ( while ( 表达式表达式E )E ) 循环体语句序列循环
41、体语句序列S S ES0 0非非0 03 3)特点)特点: : 先判断表达式,后执行语句先判断表达式,后执行语句, , 因此因此, , 若进入若进入whilewhile循环时循环时E E的值就是的值就是0 0,则语句,则语句S S一次也不执行一次也不执行三、循环语句的三种格式三、循环语句的三种格式2021-10-12数据结构672、 dowhile 循环语句循环语句2 2)执行过程)执行过程: : 执行循环体执行循环体S S 计算计算E E值值 若若E E的值为真的值为真( (非非0), 0), 则转则转 若若E E的值为假的值为假(0), (0), 则结束循环则结束循环1 1)格式)格式:
42、: do do 循环体语句序列循环体语句序列S S while ( while ( 表达式表达式E);E);ES0 0非非0 03 3)特点)特点: : 先执行循环体,再判断表达式,因此循环体至少执行一次先执行循环体,再判断表达式,因此循环体至少执行一次三、循环语句的三种格式三、循环语句的三种格式2021-10-12数据结构683、 for 循环语句循环语句2 2) 执行过程执行过程: : 计算计算E1E1 计算计算E2E2值值 若若E2E2非非0,0,则执行循环体则执行循环体S,S,再计算再计算E3,E3,转转 若若E2E2为为0,0,则结束循环则结束循环1 1) 格式格式: : for(
43、for(表达式表达式E1;E1;表达式表达式E2;E2;表达式表达式E3) E3) 循环体语句序列循环体语句序列S S 计算计算E2E2S假假(0)(0)真真( (非非0)0)计算计算E1E1计算计算E3E3三、循环语句的三种格式三、循环语句的三种格式注意:上述的三种循环体语句中,均可注意:上述的三种循环体语句中,均可 使用使用break语句语句退出循环体。退出循环体。2021-10-12数据结构69四、情况语句四、情况语句( (开关语句开关语句) )1. 1. 格式格式: : switch ( switch (表达式表达式) ) case case 常量表达式常量表达式 1: 1: 语句语句
44、1 1; breakbreak; case case 常量表达式常量表达式 2: 2: 语句语句2 2; breakbreak; case case 常量表达式常量表达式 n: n: 语句语句n n; breakbreak; default : default : 语句语句n+1n+1; breakbreak; 2. 2. 执行过程执行过程: : 先计算表达式的值先计算表达式的值; ; 按按casecase语句的顺序测试表达式的值与哪个语句的顺序测试表达式的值与哪个casecase常量值常量值相同若与某一常量相同相同若与某一常量相同, , 控制转向该控制转向该casecase常量后面的语句常量
45、后面的语句开始执行开始执行; ; 否则否则, , 在有在有defaultdefault时时, , 执行执行defaultdefault后的语句后的语句, ,无无defaultdefault时时, , 什么也不执行什么也不执行2021-10-12数据结构70五、赋值语句五、赋值语句1. 1. = = ; 或或 op= op= ; 例例 sum=3 sum=3 * * 75 ; 75 ; sum+=25; sum+=25; 2. 2. 变量变量+ + + 变量加变量加1 1后赋值给变量后赋值给变量3. 3. 变量变量- - - 变量减变量减1 1后赋值给变量后赋值给变量2021-10-12数据结构
46、71六、输入、输出语句六、输入、输出语句1、字符:用函数、字符:用函数getchar和和putchar实现。实现。 1 1) putchar(c) ;putchar(c) ; 功能:输出字符变量功能:输出字符变量c c的值,的值,c c可以是字符可以是字符变量或整型变量变量或整型变量 2 2) getchar( ) ;getchar( ) ; 功能:从终端功能:从终端( (或系统隐含的输入设备或系统隐含的输入设备) )输输入一个字符入一个字符, , 并把得到的字符作为函数的返回值并把得到的字符作为函数的返回值. .2021-10-12数据结构722、其它数据:用函数、其它数据:用函数scanf
47、和和printf实现其输入和输出。实现其输入和输出。1 1)printf( printf( 格式控制,输出表列格式控制,输出表列 ) ) printf(“a=%d,b=%d”, a , b) ;2 2)scanf( scanf( 格式控制参数格式控制参数, , 地址地址1, 1, 地址地址2, 2, ) ;) ; 功能功能: : 按格式控制参数的要求从终端上把数据传送按格式控制参数的要求从终端上把数据传送到地址参数所指的内存空间中,其中到地址参数所指的内存空间中,其中地址地址可以是变量可以是变量的地址,也可以是字符串的首地址的地址,也可以是字符串的首地址七、注解形式七、注解形式 /*字符串字符
48、串*/一、为什么要规定数据类型:一、为什么要规定数据类型: C C语言规定,在程序中用到的每一个变量都要指定它们属于哪一种类语言规定,在程序中用到的每一个变量都要指定它们属于哪一种类型,这是因为:型,这是因为: 1. 1.不同类型的数据在内存中占不同长度的存储区,而且数据在计算机不同类型的数据在内存中占不同长度的存储区,而且数据在计算机内的表示形式也不同内的表示形式也不同. . 例如:一般微机例如:一般微机 2bytes 2bytes 存放一个整型存放一个整型 4bytes 4bytes 存放一个实型存放一个实型2.2.一种数据对应着一个值的范围一种数据对应着一个值的范围int -32768i
49、nt -32768 3276732767float 10float 10-38-38 10103838之间之间2021-10-12数据结构74 例如:整型数据可以进行求余例如:整型数据可以进行求余(5%2=1)(5%2=1),而实数不能进行求余运算。,而实数不能进行求余运算。 数值型数据可以进行四则运算,而结构型数据就不能进行四则数值型数据可以进行四则运算,而结构型数据就不能进行四则运算。运算。 一个变量应有确定的类型,在一个程序中一个变量只能属于一一个变量应有确定的类型,在一个程序中一个变量只能属于一个类型,不能先后被定义为二个或多个不同的类型。个类型,不能先后被定义为二个或多个不同的类型。
50、3.3.一种数据类型对应一组允许的操作一种数据类型对应一组允许的操作2021-10-12数据结构75二、二、C C的的数据类型:数据类型:数数据据类类型型基本类型基本类型整型整型短整型短整型 (short)整型整型 ( int )长整型长整型 (long)实型实型(浮点型浮点型)单精度型单精度型 ( float )双精度型双精度型 (double)数值类型数值类型字符类型字符类型 ( char )枚举类型枚举类型 ( enum ) 构造类型构造类型(组合类型组合类型)数组类型数组类型结构体类型结构体类型 (struct)共同体类型共同体类型 (union)文件类型文件类型 ( file )指针
51、类型指针类型空类型空类型 (void)不返回任何类型的数据不返回任何类型的数据2021-10-12数据结构76在程序中,不同类型的数据既可以以常量形式出现,也可以以变量形式在程序中,不同类型的数据既可以以常量形式出现,也可以以变量形式出现。所谓常量是指在程序执行期间其值是不能发生变化。变量则其值出现。所谓常量是指在程序执行期间其值是不能发生变化。变量则其值可以变化的。可以变化的。 例如例如:1.21.2,3 3,a a 都是常量,分别代表实型、整型和字符型常量。都是常量,分别代表实型、整型和字符型常量。 它们的特点是从字面上即可判断它们是某一类型的常量,所以又称它们的特点是从字面上即可判断它们
52、是某一类型的常量,所以又称 为为字面常量字面常量或或直接常量直接常量。 符号常量:符号常量:是在一个程序是在一个程序( (或程序的一部分或程序的一部分) )中指定一符号或标识符中指定一符号或标识符代表一个常量。代表一个常量。一、一、( (直接直接) )常量和符号常量:常量和符号常量:2021-10-12数据结构77例:例: #define PRICE 30 main ( ) int num , total; num=10; total=num*PRICE; printf(“total=%d”,total); 输出结果:输出结果:total=300total=300说明:说明: (2) (2)
53、符号常量不同于变量,它符号常量不同于变量,它 的值在其作用域内不能改的值在其作用域内不能改 变,也不能再被赋值变,也不能再被赋值(1) (1) 习惯上符号常量用大写,习惯上符号常量用大写, 变量用小写以示区别变量用小写以示区别PRICE=50 PRICE=50 注意:注意:aa和和“a”a”的区别:的区别:a是单个字符常量,一个字符是单个字符常量,一个字符 “a” 是字符串常量,含有二个字符是字符串常量,含有二个字符a, 0 char c ; c=a; c=“a”; 2021-10-12数据结构78存储单元所存储的数据称为变量的值,这个存储空间的首地址就称为存储单元所存储的数据称为变量的值,这
54、个存储空间的首地址就称为该变量的地址。该变量的地址。 二、变量:二、变量:变量是其值可以改变的量称为变量变量是其值可以改变的量称为变量。每一个变量都有一个名字,称之为变量名,它代表了某个存储空间及每一个变量都有一个名字,称之为变量名,它代表了某个存储空间及其所存储的数据。其所存储的数据。 标识符是以字母或下划线开头,由字母、数字或下划线组成的字符标识符是以字母或下划线开头,由字母、数字或下划线组成的字符序列序列2021-10-12数据结构79一、控制语句一、控制语句: : 完成一定的控制功能完成一定的控制功能 if ( ) else 条件语句条件语句 for ( ) while ( ) do
55、while ( ) continue 结束本次循环结束本次循环 break 终止循环或终止循环或 switch switch 多路分支语句多路分支语句 goto 转移语句转移语句 return 返回语句返回语句循环语句循环语句上面上面 9 9 种语句中的括号种语句中的括号( )( )表示其中是一个条件,表示其中是一个条件, 表示内嵌的语句表示内嵌的语句2021-10-12数据结构80如:如:i+; a=3; i=i+1; 都是赋值语句都是赋值语句 二、表达式语句二、表达式语句: : 表达式加分号构成表达式语句表达式加分号构成表达式语句 典型的是:由赋值表达式构成赋值语句典型的是:由赋值表达式构
56、成赋值语句1. i1. i的初值为的初值为3 3 k=(i+)+(i+)+(i+) k=(i+)+(i+)+(i+) 值为值为9(3+3+3), i9(3+3+3), i的值为的值为6 6 k=(+i)+(+i)+(+i) k=(+i)+(+i)+(+i) 值为值为18(6+6+6), i18(6+6+6), i的值为的值为6 62021-10-12数据结构81逻辑运算符及优先级:逻辑运算符及优先级: &(&(与与) |() |(或或) !() !(非非) )二元二元一元一元三、逻辑运算符:三、逻辑运算符:2021-10-12数据结构82一、一维数组的定义:一、一维数组的定义:
57、定义方式定义方式: : 类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例例: int a10;: int a10; float fa100, fb100; float fa100, fb100; char s120, s240; char s120, s240;1.1.常量表达式表示数组元素个数常量表达式表示数组元素个数, ,下标变化范围下标变化范围0 0到到N-1N-1 2.C2.C不允许动态数组不允许动态数组 常量表达式中只能有常量和符号常量常量表达式中只能有常量和符号常量, , 不能有变量。不能有变量。2021-10-12数据结构83二、一维数组的引用:二、一维数组的引用:
58、数组必须先定义数组必须先定义, , 后使用后使用, , 而且只能逐个引用数组而且只能逐个引用数组元素元素, ,而不能一次引用整个数组。而不能一次引用整个数组。数组的表示形式数组的表示形式: : 数组名数组名 下标下标 下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式int aN; 下标变化范围下标变化范围0到到N-1for(i=0; iN; i+) scanf(“%d”,&ai); printf(“%d”,ai); 2021-10-12数据结构84 一个较大的程序一般应分为若干个程序模块,每一个模块用来实现个定一个较大的程序一般应分为若干个程序模块,每一个模块用来实现个定的
59、功能。所有的高级语言中都有子程序这个概念的功能。所有的高级语言中都有子程序这个概念, , 用子程序来实现模块功能。用子程序来实现模块功能。在语言中,子程序的作用是由函数来完成的。一个程序可由一个主函数在语言中,子程序的作用是由函数来完成的。一个程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用。同和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。一个函数可以被一个或多个函数调用任意多次。在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中
60、供公共选用。要善于用函数库,以减少重复编写程序段的工作量。公共选用。要善于用函数库,以减少重复编写程序段的工作量。 C C语言提倡把一个大问题划分成许多个小块,每一小块编制一个函数。语言提倡把一个大问题划分成许多个小块,每一小块编制一个函数。这样这样C C程序是由大量小函数而不是由少量大函数构成。这样作的好处程序是由大量小函数而不是由少量大函数构成。这样作的好处: : 各部分充分独立,任务单一,便于书写和调试。各部分充分独立,任务单一,便于书写和调试。 有些小函数还可以作为构件有些小函数还可以作为构件, , 被别的程序利用。被别的程序利用。2021-10-12数据结构85先看一个简单的例子先看一个简单的例子例例 7.17.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消化系统-课件
- 安徽课件完整版本
- 保密法学习+课件-高中主题班会
- 四年级上册科学教科版课件第4课 弹簧测力计
- 三年级下册科学教科版课件第4课时 月相变化的规律
- 《查字典课件》课件
- 玩转文献检索高效管理文献(四)EndNote文献管理软件
- 《大数据工作流程》课件
- 土地及青苗转让协议书(2篇)
- 2024年云南省普洱市公开招聘警务辅助人员(辅警)笔试模拟自测题(B)卷含答案
- 宪法知识讲座讲稿(课堂PPT)
- 多维阅读Crazy Cat 课件
- 数学建模案例分析--线性代数建模案例(20例)
- 马来酸酐接枝聚丙烯
- PE管道焊接工艺卡
- 第四章分子的对称性
- (最新)专家服务基层工作培训会领导讲话(精)
- 苏州预防性试验、交接试验费用标准
- 最新【SD高达G世纪-超越世界】各强力机体开发路线
- 专业英语四级听力模拟题
- [广州]污水处理厂工程监理投标大纲(325页完整)_secret
评论
0/150
提交评论