《(精品文档)数据结构-第1章-绪论演示课件》由会员分享,可在线阅读,更多相关《(精品文档)数据结构-第1章-绪论演示课件(28页珍藏版)》请在金锄头文库上搜索。
1、第第1 1章章 绪论绪论 第第1 1章章 绪论绪论 1.1 1.1 什么是数据结构什么是数据结构1.2 1.2 数据的逻辑结构和物理结构数据的逻辑结构和物理结构1.3 1.3 算法描述算法描述1.4 1.4 算法分析算法分析1.5 1.5 小结小结习题习题1 1.第第1 1章章 绪论绪论 1.1 什么是数据结构什么是数据结构 数据结构(Data Structure)包括两方面的内容:数据和结构。 最简单的数据结构的例子是一维数组。例如:要计算100个数a1 , a2 , , a100的累加和,显然,用赋值语句sum = a1 + a2 + +a100来描述求和的表达式是极不科学的。我们可以把这
2、100个数以线性排列的结构组成一个一维数组Ai。在此基础上,计算这100个数的累加和的程序段可描述为sum = 0 ;for(i=1; i =100; i+) sum = sum + Ai;.第第1 1章章 绪论绪论 计算结果保存在sum中。这个程序段比sum = a1 + a2 + + a100这样的语句要简明得多,况且在程序设计中不允许书写省略号。上面的程序段实际上包括了两方面的内容:第一是数据结构int A100表示的数组,第二是数组作为数据结构的形式所描述的算法,从而达到使程序设计简明、易读的目的。 要用计算机实现对学校的管理,就要经课题调查、研究,按管理的模式确定程序的数据处理模式和
3、流程,如图1-1所示,还要确定具体部门的数据结构形式,如表1-1所示的学生成绩表。 .第第1 1章章 绪论绪论 图1-1 学校管理程序流程框图.第第1 1章章 绪论绪论 表1-1 学生成绩表.第第1 1章章 绪论绪论 1.2 1.2 数据的逻辑结构和物理结构数据的逻辑结构和物理结构数据结构作为一门独立的课程是从1968年才开设的。而数据结构课程中的有关内容,如表处理、串处理、树结构等早已散见于计算机的其他课程,如操作系统、编译原理、表处理语言等课程中,但其内容都缺乏规范性和系统性。随着计算机科学的发展和计算机应用的普及,计算机加工、处理的对象已从早期的数值、布尔值扩展到字符串、表格、图像甚至语
4、音等等。这些能被计算机存储、加工的对象称为数据。因此现在认为,数据包含数值和非数值两种类型。 .第第1 1章章 绪论绪论 数据通常由数据元素组成,数据元素是数据的基本单位,具有完整、确定的实际意义,在程序中作为一个整体而加以考虑和处理。如表1-1所示的学生成绩表中,每个学生的数据用学号、姓名和各门学科的成绩来表示,这些具体的数值和字符是数据元素。这些数据元素准确地表示了某个学生的学习成绩。在很多情况下,数据元素又由数据项组成,但数据项通常不具有完整、确定的实际意义或不被当作一个整体对待。如在学生成绩表中,“学号”、“姓名”、“C语言”等内容都是数据项,所有数据项中的数据组成了数据元素。因此,每
5、个学生的成绩是一个数据元素,成绩中的每一项都是数据元素中的数据项。.第第1 1章章 绪论绪论 每个项目是作为成绩的一个成分出现的,但单独的项目没有完整确定的实际意义。例如,将表格中第一行的各个数据项拆开,分别地看,则“1”、“张平”、“82”这些数据分别表示一个学号、一个学生名、C语言课程的成绩等,它们各自在学生成绩表中是一个个离散的数据,不能完整地表示某个学生的学习档案,但这些数据项的组合就构成了一个具有完整意义的某学生的学习情况。所以,在由多个数据项所构造的数据元素中,数据项不是数据元素,而每一个项目的组合则是数据元素。 .第第1 1章章 绪论绪论 但是,当有些数据元素不能再分解为数据项的
6、组合,即该数据元素仅由一个数据项组成时,这个数据项就是该数据元素自身。现实的世界是信息的世界。所谓信息,就是客观存在的反映,而数据就是信息的表现形式和描述,这种描述是为了能被计算机所识别、存储和处理。而这种描述一般可归结为数字、字符和各种字符的集合,如上例中的学号、姓名、成绩等。值得注意的是,我们研究的数据不是孤立的,而表现出了相互关联的特性。如某学生的姓名以及该学生的学科成绩都作为数据存在,其数据与数据之间的关系为:学生姓名与班级名对应,成绩与学科相匹配。这种数据元素之间存在的相互关系就是数据的结构。这种由设计者建立的数据之间的结构也称为数据之间的逻辑结构。.第第1 1章章 绪论绪论 图1-
7、2所示为四类基本逻辑结构的示意图,它们反映了四类基本的数据组织形式。图中的小圆圈称为结点。一个结点代表一个数据元素。结点之间的连线代表逻辑关系,即相应数据元素之间的邻接关系。 .第第1 1章章 绪论绪论 图1-2 四类基本逻辑结构(a)集合;(b) 线性结构;(c) 树形结构;(d) 图状结构.第第1 1章章 绪论绪论 以上的各种逻辑结构就是本书中将要详细介绍的数学模型。关于逻辑结构,有以下几点需特别注意。(1) 逻辑结构与数据元素本身的形式、类型、内容无关。 (2) 逻辑结构与数据元素的相对位置无关。 (3) 逻辑结构与所含结点个数无关。 .第第1 1章章 绪论绪论 1.3 1.3 算法描述
8、算法描述1.3.1 数据结构上的基本操作本书中主要介绍各种算法,并给出部分算法对应的C语言程序。数据结构上的基本操作主要有以下几种:(1)查找:寻找满足特定条件的数据元素所在的位置。(2)读取:读出指定位置上数据元素的内容。(3)插入:在指定位置上添加新的数据元素。(4)删除:删去指定位置上对应的数据元素。(5)更新:修改某个数据元素的值。.第第1 1章章 绪论绪论 根据操作的结果可将操作分为两种基本类型: (1)加工型操作:其操作改变了原逻辑结构的“值”,如数据元素的个数、某数据元素的内容等(一般不考虑改变逻辑结构的类型)。上面所列基本操作的后三种操作均为加工型操作。 (2)引用型操作:其操
9、作不改变原逻辑结构的“值”,只是查找或读取。.第第1 1章章 绪论绪论 1.3.2 算法的描述方法以下给出一个在文件操作中进行数据匹配的算法,该算法用C语言描述。假如把文件中每个记录的关键值(区别每个不同记录的数据)均存放于数组中,且又假设该数据已输入指定的数组,要求对文件中的记录做成批处理。我们把待处理文件中的数据称为主文件数据,记为m(j),1jq,它是有序的;把由成批的待处理记录组成的文件称为事务处理文件,其事务处理数据为t(i),1ip,它也是有序的。若m(j)和t(i)的值相等,则说明文件的记录和事务处理文件的记录相匹配。相同数据的m(j)和t(i)合并处理后产生的另一新文件的记录为
10、n(k),r(1)是t文件中的非处理文件,u(k)是m文件中的非活跃文件。图1-3所示的是成批数据匹配流程图,图1-4所示的是数据匹配图。.第第1 1章章 绪论绪论 图1-3 成批数据匹配流程图.第第1 1章章 绪论绪论 图1-4 数据匹配图.第第1 1章章 绪论绪论 这个成批数据匹配过程的算法可以按流程图和数据匹配的原则,按C语言的书写规则,编写成如下的算法,算法中文件记录内的数据都以数组表示。(若该算法中同时产生非活跃文件u(k),则如何修改此算法,请读者在阅读该算法后自行修改和设计。)/*数据匹配算法*/PF(mq,tp)/*m为主文件数组,t为事务处理文件数组,r为非处理文件数组,n为
11、新文件*/intk,j,i,1;k=1=0;j=i=1;while(i=p) .第第1 1章章 绪论绪论 if(j=q)if(ti=mj)k+;nk=ti*mj;j+;i+;elseif(timj)1+;r1=ti;i+;.第第1 1章章 绪论绪论 elsej+;else1+;r1=ti;i+;.第第1 1章章 绪论绪论 1.4 1.4 算法分析算法分析1.4.1 算法设计的要求 通常从以下几个方面评价算法的质量:(1)正确性:算法应能正确地实现预定的功能,即处理要求。(2)易读性:算法应易于阅读和理解,以便于调试、修改和扩充。.第第1 1章章 绪论绪论 (3)健壮性:正确的输入能得到正确的输
12、出,这是算法必须具有的特性之一。 (4)高效率:即达到所需的时空性能。一个算法的时空性能是指该算法的时间性能(时间效率)和空间性能(空间效率)。 1.4.2算法设计的时间因素如何衡量和评价一个算法的优劣呢?假如所设计的算法在逻辑上是可行的,那么,尽管评价算法的标准很多,通常还是从以下三个方面来考虑: (1)算法在计算机中运行所消耗的时间,即所需的机器时间,也称为时间因素或时间复杂性。.第第1 1章章 绪论绪论 (2) 执行算法时,在计算机中所占存储容量的大小,即所需的存储空间,也称为空间因素或空间复杂性。(3) 所设计的算法是否易读、易懂,是否容易转换成其他可运行的程序语言。设有程序段表示两个
13、nn的矩阵相乘,其算法描述如下:for(i=1;i=n;i+)/*n+1*/for(j=1;j=n;j+)/*n(n+1)*/ci,j=0;/*n2*/for(k=1;k=n;k+)/*n2(n+1)*/ci,j=ci,j+ai,k*bk,j;/*n3*/ /*n2*/ /*n*/.第第1 1章章 绪论绪论 以上程序段的语句总执行次数Xn表示为Xn=(n+1)+n(n+1)+n2+n2(n+1)+n3n3+n2+n=3n3+4n2+3n+1用衡量执行时间的量级来表示为Xn=O(n3)其含义是:执行次数Xn将不超过n3的某个常数倍或Xn的量级与n3成正比。那么如何分析不同算法的执行时间量级呢?O
14、(1)表示算法的执行时间为常量,称该算法为常量阶的;O(n)表示算法的执行时间为线性,称为线性阶;O(n2)为平方阶;O(2n)为指数阶。若两个算法分别为O(1)和O(n),当n充分大时,显然O(1)的执行时间要少,整个算法的速度快。同样,O(n)和O(lbn)相比较,当n充分大时,lbn的值比n小,故O(lbn)所对应算法的速度要快得多。.第第1 1章章 绪论绪论 1.5 1.5 小结小结 数据结构是一门研究数据的逻辑结构和物理结构,以及它们之间的相互关系和所定义的算法在计算机上如何运行的学科。凡能被计算机存储、加工的对象都称为数据。数据通常由数据元素表示,数据元素是数据的基本单位,具有完整
15、、确定的实际意义,在程序中作为一个整体而加以处理。数据元素又由数据项组成,数据项通常不具有完整、确定的实际意义或不被当作一个整体对待。当数据元素不能再分解为数据项的组合时,该数据元素仅由一个数据项组成,这个数据项就是该数据元素本身。.第第1 1章章 绪论绪论 数据元素之间存在的相互关系称作数据的结构,由用户建立的数据之间的结构或关联称作数据之间的逻辑关系。集合、线性结构、树形结构和图状结构是四种基本的逻辑结构。逻辑结构在计算机中的存储形式称作数据的物理结构。本书以C语言来描述各种数据结构的操作运算所对应的算法,为了便于书写和阅读,大多数的算法略去了对变量的说明和约定,又假设了某些数据的存在。.第第1 1章章 绪论绪论 习题习题1 11.1 什么是数据、数据元素和数据项?什么是结构?举例说明两者之间的关系。1.2 什么是逻辑结构和存储结构?两者之间的关系是什么?1.3 什么是数据结构?数据结构研究的主要内容是什么?1.4 在本章成批数据匹配程序的基础上,试编写同时产生非活跃文件u(k)的算法。.第第1 1章章 绪论绪论 1.5 试确定如下程序段中各语句的执行次数和各程序的执行时间量级。(1)i=1;x=0;while(i=n)x=x+i;i=i+1;(2)x=1;for(i=1;i=n;i+)for(j=1;j=i;j+)x=x+1;.