,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,主目录,下一页,上一页,退 出,本章要点,第一章 绪论,1.1 基本概念和术语,1.2 什么是数据结构,1.3 数据类型,1.4 算法和算法分析,11/19/2024,数据和信息,数据,:是客观事物的符号表示,是对现实世界的事物采用计算机能够识别、存储和处理的形式进行描述的符号的集合,信息,:是其中的含义,不同的形式可以传达同样的信息,数据,(Data),是信息的载体,它能够被计算机识别、存储和加工处理。它是计算机程序加工的原料,应用程序处理各种各样的数据。是计算机加工处理的对象,它可以是数值数据,也可以是非数值数据。,1.1 基本概念和术语,11/19/2024,数据元素(Data Element),数据元素是数据的基本单位,即数据集合中的个体。数据元素亦称,节点,或,记录,在计算机程序中通常作为一个整体进行考虑和处理。,有时一个数据元素可由若干,数据项,(Data Item)组成。数据项是数据的最小单位。,数据项:分为组合项和原子项,1.1 基本概念和术语,学号,姓名,性别,籍贯,出生年月,1,2,”a”,”b”,,11/19/2024,“学生”表格,1.1 基本概念和术语,11/19/2024,数据对象(Data Object),数据对象,是性质相同的数据元素的集合,是数据的一个子集,例如,整数数据对象,N,=0,1,2,学生数据对象,1.1 基本概念和术语,11/19/2024,数据结构(,Data Structure),是指互相之间存在着一种或多种关系的数据元素的集合。在任何问题中,数据元素之间都不会是孤立的,在它们之间都存在着这样或那样的关系,这种数据元素之间的关系称为结构。,是相互之间存在一种或多种特定,关系,的,数据元素,的集合,数据结构的,逻辑结构,和,物理结构,(又称为存储结构)两个方面(层次),逻辑结构,:是对数据元素之间的逻辑关系的描述,物理结构,:是逻辑结构在计算机中的表示或实现,1.2 什么是数据结构,11/19/2024,逻辑结构可描述为 B=(D,R),有限个数据元素的集合,有限个节点间关系的集合,一般用二元组,表示D中各数据元素之间的前驱、后继关系,1.2.1 逻辑结构,11/19/2024,B=(D,R),D=Sun,Mon,Tue,Wed,Thu,Fri,Sat,R=,,Sun,Mon,Tue,Wed,Thu,Fri,Sat,例1:一周七天的数据结构的表示,1.2.1 逻辑结构,11/19/2024,B=(D,R),D=学院,计算机系,电子系,机电系,土木系,应用专业,网络专业,信息管理专业,R=,,例2:学校的人事管理,1.2.1 逻辑结构,11/19/2024,学院,电子系,土木系,计算机系,机电系,应用专业,网络专业,信息管理专业,树型结构,:指的是数据元素之间存在着,“一对多”的树形关系的数据结构,例2:学校的人事管理,1.2.1 逻辑结构,11/19/2024,1,2,3,图状或网状结构,:指的是数据元素之间存在着“多对多”的网络关系的数据结构,例3:3个站点的关系图,1.2.1 逻辑结构,11/19/2024,数据之间的相互关系称为逻辑结构。通常分,为四类基本结构,:,集合,结构中的数据元素除了同属于一种类型外,别无其它关系。,线性结构,结构中的数据元素之间存在一对一的关系。,树型结构,结构中的数据元素之间存在一对多的关系。,图状结构或网状结构,结构中的数据元素之间存在多对多的关系。,1.2.1 逻辑结构,11/19/2024,1.2.2 物理结构,数据结构包括数据的逻辑结构和数据的物理,结构。,数据的,逻辑结构,可以看作是从具体问题抽象出来的数学模型,它与数据的存储无关。,我们研究数据结构的目的是为了在计算机中实现对它的操作,为此还需要研究如何在计算机中表示一个数据结构。,数据结构在计算机中的标识(又称映像)称为数据的,物理结构,,或称,存储结构,。它所研究的是数据结构在计算机中的,实现方法,,包括数据结构中元素的表示及元素间关系的表示。,11/19/2024,1.2.2 物理结构,元素n,.,元素i,.,元素2,元素1,L,o,L,o,+m,L,o,+(i-1)*m,L,o,+(n-1)*m,存储地址,存储内容,顺序存储,顺序存储结构常用于线性逻辑结构,将逻辑上相邻的数据元素存储在物理上相邻的存储单元里,11/19/2024,数据的存储结构可采用,顺序存储,或,链式存储,的方法。,链式存储方法,对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针字段来表示,由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。,除了通常采用的顺序存储方法和链式存储方法外,有时为了查找的方便还采用索引存储方法和散列存储方法。,1.2.2 物理结构,11/19/2024,1536,元素2,1400,元素1,1346,元素3,元素4,head,1346,元素3,1536,.,.,.,1536,元素2,1400,.,.,.,元素4,1346,1400,元素1,1345,指针,存储内容,存储地址,链式存储,1345,1.2.2 物理结构,11/19/2024,链式存储,一般情况下,每个节点都由两部分组成:,数据域和指针域,数据域,存放元素本身的数据,指针域,存放指针,数据元素之间逻辑上的联系由指针来体现,1536,元素2,1400,元素1,1346,元素3,元素4,head,1345,1.2.2 物理结构,11/19/2024,数据类型,定义:,一组性质相同的值的集合,以及定义于这个值集合上的一组操作的总称,C语言中的基本数据类型,char int float double void,字符型 整型 浮点型 双精度型 无值,1.3 数据类型,11/19/2024,但在另一方面,抽象数据类型的范畴更广,它不再局,限于前述各处理器中已定义并实现的数据类型,还包括,用户在设计软件系统时自己定义的数据类型。为了提高,软件的重用性,在近代程序设计方法学中,要求在构成,软件系统的每个相对独立的模块上,定义,一组数据和施,于这些数据上的一组操作,,并在模块的内部给出这些数,据的表示及其操作的细节,而在模块的外部使用的只是,抽象的数据及抽象的操作。这也就是面向对象的程序设,计方法。,1.3 数据类型,11/19/2024,数据结构的三个方面,1数据的逻辑结构,2、数据的,存储结构,3、数据的运算:检索、排序、插入、删除、修改等。,A线性结构,B非线性结构,A 顺序存储,B 链式存储,线性表,栈,队列,树形结构,图形结构,(,亦称物理结构,),数据结构可描述为 B=(D,R),按某种逻辑关系组织起来的一批数据,按一定的映象方式把它存放在计算机的存储器中,并在这些数据上定义了一个运算的集合,就叫做,数据结构,11/19/2024,算法,:是对特定问题求解步骤的一种描述算法是指令的有限序列,其中每一条指令表示一个或多个操作。,算法具有以下五个特性:,(1),有穷性,一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。,(2),确定性,算法中每一条指令必须有确切的含义。不存在二义性。且算法只有一个入口和一个出口。,(3),可行性,一个算法是可行的。即算法描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。,(4),输入,一个算法有零个或多个输入,这些输入取自于某个特定的对象集合。,(5),输出,一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。,1.4 算法和算法分析,1.4.1 算法,11/19/2024,1.4.2,算法设计的要求,评价一个好的算法有以下几个标准:,(1),正确性(Correctness):,算法应满足具体问题的需求。,(2),可读性(Readability):,算法应该好读。以有利于阅读,者对程序的理解。,(3),健壮性(Robustness):,算法应具有容错处理。当输入非,法数据时,算法应对其作出反应,而不是产年,莫名其妙的输出结果。,(4),效率与存储量需求:,效率指的是算法执行的时间;存储,量需求指算法执行过程中所需要的最大存储空,间。一般,这两者与问题的规模有关。,11/19/2024,性能评价,对问题规模和该算法在运行时所占的空间S和所耗费的时间T给出一个数量关系的评价,数量关系评价体现在时间,数量关系评价体现在空间,1.4.3,算法效率的度量,11/19/2024,时间评价,算法执行时间,:所有语句执行时间的总和。,一般是对算法中语句的执行次数做出估计,语句频度,:该语句在一个算法中重复执行,的次数。,1.4.3,算法效率的度量,11/19/2024,算法的时间复杂度:,一般情况下,算法中基本,操作重复执行的次数是问题规模n的某个函数,算法的时间量度记作,T(n)=O(f(n),称作,算法的渐近时间复杂度。,即算法的时间量度,“O”表示数量级,“f(n)”表示语句总的执行次数是给定问题的规模n的函数,随问题规模n的增大,算法的频度T(n)和f(n)的增长率同阶。,例1:x+=5;,单个语句的频度为1,则程序段的时间复杂度为T(n)=O(1)(,频度,:是指该语句重复执行的次数),11/19/2024,例,for(i=1;i=n;i+),/*n */,for(j=1;j=n;j+),/*n,2,*/,c ij=0;,/*n,2,*/,-,T(n)=2n,2,+n,当n充分大时,T(n)与n,2,是同阶的。,该算法时间复杂度为:,T(n)=O(n,2,),11/19/2024,一个算法时间为O(1)的算法,它的基本运,算执行的次数是固定的。因此,总的时间,由一个常数(即零次多项式)来限界。而,一个时间为O(n,2,)的算法则由一个二次多项,式来限界。,11/19/2024,以下六种计算算法时间的多项式是最常用的。其关系为,:,O(1)O(logn)O(n)O(nlogn)O(n,2,)O(n,3,),指数时间的关系为:,O(2,n,)O(n!)O(n,n,),当n取得很大时,指数时间算法和多项式,时间算法在所需时间上非常悬殊。因此,只,要有人能将现有指数时间算法中的任何一个,算法化简为多项式时间算法,那就取得了一,个伟大的成就。,11/19/2024,有的情况下,,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同,。例如:,int s_search(S_TBL tbl,KeyType kx),/*在表tbl中查找值为kx的数据元素,若找到返回该元素在数组中的下标,否则返回0*/,tbl.elem0.key=kx;,/*,存放监测,这样在从后向前查找失败时,不必判表是否检测完,*/,for(i=tbl.length;tbl.elemi.key kx;i-);,/*,从标尾端向前找,*/,return i;,11/19/2024,平均时间复杂度,:分析对所有可能输入数据集的期望值的平均时间复杂度,最坏时间复杂度,:分析最坏情况以估计出算法执行时间的上界,11/19/2024,1.4.4,算法的存储空间需求,空间复杂度,:算法所需辅助存储空间的度量。,记作:S(n)=O(f(n),其中:n为问题的规模(或大小),程序运行所需的存储空间包括以下两部分:,固定部分。,这部分空间与所处理数据的大小和个数无关,或者称与问题的实例的特征无关。主要包括程序代码、常量、简单变量、定长成分的结构变量所占的空间。,可变部分。,这部分空间大小与算法在某次执行中处理的特定数据的大小和规模有关。例如100个数据元素的排序算法与1000个数据元素的排序算法所需的存储空间显然是不同的,。,11/19/2024,醦膱镟胺艛褼招讨蔘纺鶪銷饩紋国瑶嵖約鹠甉磸覺抻蟷鱞旴惘兲炧貏珊芚鶃暌篏癰愔椳撹娴噱瓳鉗譣蠀萤睰曔考祈熛岬抋卖褌險莓癴譙嘡渾烝豛雓趧慘虷敌栀蠿愈齼瀵魄峇珥槛琷且嘛溺芐菙邢灿枃蝛蹿爢蕍綕璾萗牳慽铓茼总饆倝轺娏撉釲偄踮萳今裷搻諳涫鱊蜀杣瀭鬫讔橫髗褷