数据结构概述课件_第1页
数据结构概述课件_第2页
数据结构概述课件_第3页
数据结构概述课件_第4页
数据结构概述课件_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.1为什么学习数据结构

1.2数据结构的有关概念和术语

1.3算法和算法描述

1.4算法的时空效率分析方法

1.5小结与习题数据结构概述11.1为什么要学习数据结构

研究数据的特性、数据间的相互关系及其对应的存储表示,并利用这些特性、关系和存储表示设计出相应的算法和程序。为什么要学习数据结构?计算机处理的数据量越来越大;数据的类型越来越多;数据的结构越来越复杂。解决一个问题时几个步骤:抽象出一个适当的数学模型,设计或选择一个解决此类数学模型的算法,编写程序进行调试、测试,直至得到最终的解答。2【例1-1】学生信息检索问题。学生信息包括学号、姓名、性别和成绩等,一行为一个记录,表示一个学生的信息(也称为一个数据元素),一列为一个属性。学

号姓

名性

别成

绩20050601张

三男51820050602李一宁女49620050603吴

磊女581.5……………20050636梁

磊男529线性关系:对线性表的主要操作有查找、修改、插入和删除等。

3【例1-2】某大学专业设置问题。显然这种关系用“树”型结构来表示更形象。通常用来表示结点的分层组织,结点之间是一对多的关系。对树型结构主要操作有查找、修改、插入和删除等。**大学机械工程系电子工程系计算机与信息工程系机械制造材料科学电子应用电气自动化计算机应用与维护计算机应用与维护4【例1-3】通信网络问题。带圆圈的顶点表示城市,顶点和顶点之间的连线和数据表示城市之间的通信线路及其长度。,各顶点之间是多对多的关系,是网状结构,也称为图型结构,操作有:求从一个顶点到另一个顶点的最短路径等。由以上三个例子可见,描述这类非数值计算问题的数学模型有线性表、树、图等。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。

B

CDFEA6045404230408065322651.2数据结构的有关概念和术语

1.2.1基本概念和术语1.数据(Data)是描述客观事物的数值、字符以及所有能被输入到计算机并能被计算机识别、存储和处理的符号的集合。客观事物包括数值数据和非数值数据。数值数据:整数、实数或复数;非数值数据:字符、文字、图形、图像和声音等。2.数据元素(DataElement)是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等。数据项:数据结构中讨论的最小单位。一个数据元素可由若干个数据项(DataItem)组成。例如,学生信息表的每一个数据元素就是一个学生记录,它包括学生的学号、姓名、性别、成绩等数据项。63.数据对象(DataObject)是具有相同性质数据元素的集合。4.数据类型(DataType)

在用高级语言编写的程序中,每个变量、常量或表达式都有一个它所属的确定的数据类型。5.抽象数据类型(AbstractDataType,简称ADT)是指基于逻辑关系的数据类型以及定义在该类型之上的一组操作。ADT抽象数据类型名{

数据对象:(数据对象的定义)数据关系:(数据关系的定义)基本操作:(基本操作的定义)}7【例1-4】线性表的抽象数据类型可描述如下:ADTLinear_list{数据元素所有ai属于同一数据对象,i=1,2,…,n(n≥1)逻辑结构所有数据元素ai存在次序关系(ai,ai+1),a1无前驱,an无后继。操作

/*设L为Linear_list类型的线性表*/InitList(L);/*建立一个空的线性表L*/Length(L);/*求线性表L的长度*/GetElement(L,i);/*取线性表L中的第i个元素*/Locate(L,x);/*确定元素x在线性表L中的位置*/Insert(L,i,x);/*在线性表L中的第i个位置处插入数据元素x*/Delete(L,i);/*删除表L中第i个位置的元素*/……};/*ADTLinear_list*/81.2.2数据结构定义数据结构(DataStructure)是指互相之间存在着一种或多种关系的数据元素的集合。数据元素之间的关系称为结构。数据的结构包括逻辑结构和物理结构。(1)逻辑结构:是数据元素之间的相互逻辑关系,它与数据的存储无关,是独立于计算机而存在。数据结构是由两个集合构成的一个二元组:Data_Structure(D,R))Data_Structure是一种数据结构,它由同属一个数据对象的数据元素的有限集合D和D上二元关系的有限集合R组成。其中:D={di|1≦i≦n,n≧1}R={rj|1≦j≦m,m≧1}9di表示第i个数据元素,rj表示第j个关系。D上二元关系R是序偶的集合。对于R中的任一序偶<x,y>(x,y∈D),x称为序偶的第一元素,y称为序偶的第二元素,又称序偶的第一元素是第二元素的直接前驱;第二元素为第一个元素的直接后继。【例1-5】树型结构中的圆圈代表数据元素,带箭头的连线表示元素之间的关系,试用二元组表示法表示其逻辑结构。解:二元组为(D,R)其中,D={A,B,C,E,F,G,H,I,J};R={<A,B>,<A,C>,<A,E>,<B,F>,<B,G>,<E,H>,<E,I>,<E,J>}ABCEFGHIJ10通常有下列四种基本的结构:a.集合结构。集合是元素关系极为松散的一种结构。b.线性结构。线性结构的逻辑特征是:若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。c.树型结构。该结构的数据元素之间存在着一对多的关系。d.图型结构。该结构的数据元素之间存在着多对多的关系,图型结构也称作网状结构。(2)物理结构(或存储结构)是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。具体实现的方法有顺序、链接、索引、散列等多种,数据的具体操作与存储结构有很密切的联系。数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。同时还要考虑执行算法时的时间和空间效率。111.3算法和算法描述⑴有穷性。一个算法必须在有穷步之后结束,即必须在有限时间内完成。⑵确定性。算法的每一步必须有确切的定义,无二义性。⑶可行性。算法中的每一步都可以通过已经实现的基本运算的有限次执行得以实现。⑷输入。一个算法具有零个或多个输入,这些输入取自特定的数据对象集合。⑸输出。一个算法具有一个或多个输出,这些输出同输入之间存在某种特定的关系。1.3.1算法与算法特性算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列。一个算法应该具有下列特性:12一个好的算法通常要达到以下的要求:正确。执行结果应当满足预先规定的功能和性能要求。可读。应当思路清晰、层次分明、简单明了、易读易懂。健壮。当输入不合法数据时,应能作适当处理,不至引起严重后果。高效。有效使用存储空间和有较高的时间效率。1.3.2算法描述最简单的方法是使用自然语言,其优点是简单且便于人们对算法的阅读;缺点是转换成高级语言困难。类C语言忽略高级程序设计语言中一些严格的语法规则与描述细节,因此它比程序设计语言更容易描述和被人理解,比自然语言更接近程序设计语言,很容易被转换成高级语言。13本书对所用类C语言作如下约定:1.问题的规模用MAXSIZE#defineMAXSIZE602.预定义常量和类型:#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineOVERFLOW-1typedefintStatus;3.数据结构(存储结构)的表示用类型定义(typedef)描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义。例1.学生信息检索系统中,用一维数组作存储n个学生的信息,数组中的数据元素有4个域:学号、姓名、性别和成绩:typedefstructstd_info{longintNum;/*学号域*/charName[8];/*姓名域*/charSex;/*性别域*/floatScore;/*成绩域*/}ElemType;144.基本操作的算法都用以下形式的函数描述函数类型函数名(函数参数表){/*算法说明*/语句序列;}/*函数名*/5.C语言中的常用语句赋值(=)、选择(if、if…else、switch…case…default)、循环(for、while、do…while)、结束(return、break、continue、exit)、输入和输出等语句。6.基本运算和基本函数基本运算有+、-、*、/、%、->、&&和||等。基本函数有max、min、abs、fabs、eof等。15

例设某班级有n个学生,编写算法,查找班级中成绩最高的学生,并输出该学生的所有信息。分析:,算法依次查看数组中的元素,并保存当前最高成绩及其下标。使用类C语言编写:intlargest(ElemTypeS[MAXSIZE],intn){floatcurrlarge=0.0;inti,j=0;/*赋初值

*/

for(i=0;i<n;i++)

/*进入循环

*/

if(S[i].Score>currlarge){j=i;currlarge=S[i].Score;}printf(“%10ld%10s%10c%10f\n”,S[j].Num,S[j].name,S[j].Sex,S[j].Score);}/*largest*/typedefstructstd_info{longintNum;charName[8];charSex;floatScore;}ElemType;161.4算法时空效率分析方法评价算法的性能用时间复杂度与空间复杂度来度量。1、算法的时间复杂度算法的时间复杂度(Timecomplexity)是指算法转换为程序后(这里仍称为算法)在计算机上从开始运行到结束所需要的时间。运行所需要的时间取决于下列因素:⑴硬件的速度。与硬件的配置高低有关。⑵书写程序的语言。语言的级别越高,其执行效率就越低。⑶编译程序所生成目标代码的质量。⑷依据算法所选用的策略。⑸问题的规模。一般情况下,处理的数据量越大,执行的时间相对也越长。17通常的做法是:不考虑不确定的情况,而以算法中简单操作重复执行的次数作为算法的时间度量。为此,一个特定算法的运行时间长短就只依赖于问题的规模n,或者说它是问题规模n的函数f(n)。【例1-7】求累加求和intsum(intb[],intn){intsum=0;/*第1条定义并赋初值语句执行1次*/

for(inti=0;i<n;i++)/*3n+2次*/sum+=b[i];/*n次*/returnsum;}/*返回语句执行1次*/18要精确地计算f(n)是困难的,引入渐进时间复杂度在数量上估计一个算法的执行时间。算法时间的度量记作T(n)=Ο(f(n))它表示随问题的规模n的增大,算法执行时间的增长率和f(n)相同。使用大Ο记号,Ο(f(n))称为算法的渐进时间复杂度(AsymptoticTimeComplexity),简称时间复杂度。例如,一个程序的实际执行时间为

T(n)=2.7n3+3.8n2+5.3。则T(n)=Ο(n3)。19【例1-8】求下面程序段的时间复杂度。

s=0;for(j=1;j<=n;j++)for(x=1,k=1;k<=n;k++){x=x*k;s+=x;}解:该算法中“s=0;”的频度为1,后面由两个“for”语句构成了一个二重循环结构,其内循环体执行的频度为n2,用最高数量级n2的表示,则该程序段的时间复杂度为O(n2)。通常将称Ο(1)为常数阶,Ο(n)为线性阶,O(n2)为平方阶。算法还可能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论