《数据结构(C语言描述)》-马秋菊-电子教案 第1章

上传人:E**** 文档编号:89436929 上传时间:2019-05-25 格式:PPT 页数:24 大小:121KB
返回 下载 相关 举报
《数据结构(C语言描述)》-马秋菊-电子教案 第1章_第1页
第1页 / 共24页
《数据结构(C语言描述)》-马秋菊-电子教案 第1章_第2页
第2页 / 共24页
《数据结构(C语言描述)》-马秋菊-电子教案 第1章_第3页
第3页 / 共24页
《数据结构(C语言描述)》-马秋菊-电子教案 第1章_第4页
第4页 / 共24页
《数据结构(C语言描述)》-马秋菊-电子教案 第1章_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《《数据结构(C语言描述)》-马秋菊-电子教案 第1章》由会员分享,可在线阅读,更多相关《《数据结构(C语言描述)》-马秋菊-电子教案 第1章(24页珍藏版)》请在金锄头文库上搜索。

1、2019年5月25日,1,1.1 为什么学习数据结构 1.2 数据结构的有关概念和术语 1.3 算法和算法描述 1.4 算法的时空效率分析方法 1.5 小结与习题,第一章 数据结构概述,2019年5月25日,2,主要介绍课程中常用术语、常用数据结构及用类C语言实现算法描述的一般规则,算法的时间复杂度和空间复杂度分析与评价。,本章主要内容,通过本章学习,应掌握如下内容: 数据结构中的基本概念及常用术语。 线性结构、树型结构和图型结构等的逻辑特点。 算法的定义、特性及用类C语言描述算法的规则。 评价算法优劣的标准:时间复杂度、空间复杂度的定义及表示。,2019年5月25日,3,1.1 为什么要学习

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

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

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

5、a Object)是具有相同性质数据元素的集合。,4数据类型(Data Type) 在用高级语言编写的程序中,每个变量、常量或表达式都有一个它所属的确定的数据类型。,5抽象数据类型(Abstract Data Type,简称ADT)是指基于逻辑关系的数据类型以及定义在该类型之上的一组操作。,ADT 抽象数据类型名 数据对象:(数据对象的定义) 数据关系:(数据关系的定义) 基本操作:(基本操作的定义) ,2019年5月25日,9,【例1-4】线性表的抽象数据类型可描述如下: ADT Linear_list 数据元素 所有ai属于同一数据对象,i=1,2,n (n1) 逻辑结构 所有数据元素ai

6、存在次序关系(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个位置的元素 */ ; /* ADT Linear_list */,2019年5月25日,10,1.2.2 数

7、据结构定义 数据结构(Data Structure)是指互相之间存在着一种或多种关系的数据元素的集合。数据元素之间的关系称为结构。数据的结构包括逻辑结构和物理结构。 (1)逻辑结构:是数据元素之间的相互逻辑关系,它与数据的存储无关,是独立于计算机而存在。,数据结构是由两个集合构成的一个二元组: Data_Structure(D,R) Data_Structure是一种数据结构,它由同属一个数据对象的数据元素的有限集合D和D上二元关系的有限集合R组成。其中: D=di|1in, n1 R=rj|1jm, m1,2019年5月25日,11,di表示第i个数据元素,rj表示第j个关系。 D上二元关系

8、R是序偶的集合。对于R中的任一序偶(x, yD),x称为序偶的第一元素,y称为序偶的第二元素,又称序偶的第一元素是第二元素的直接前驱;第二元素为第一个元素的直接后继。,【例1-5】树型结构中的圆圈代表数据元素,带箭头的连线表示元素之间的关系,试用二元组表示法表示其逻辑结构。 解:二元组为 ( D , R ) 其中,D = A,B,C,E,F,G,H,I ,J; R= , , , , , , , ,2019年5月25日,12,通常有下列四种基本的结构: a.集合结构。集合是元素关系极为松散的一种结构。 b.线性结构。线性结构的逻辑特征是:若结构是非空集,则有且仅有一个开始结点和一个终端结点,并且

9、所有结点都最多只有一个直接前驱和一个直接后继。 c.树型结构。该结构的数据元素之间存在着一对多的关系。 d.图型结构。该结构的数据元素之间存在着多对多的关系,图型结构也称作网状结构。,(2)物理结构(或存储结构)是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。具体实现的方法有顺序、链接、索引、散列等多种,数据的具体操作与存储结构有很密切的联系。,数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。同时还要考虑执行算法时的时间和空间效率。,2019年5月25日,13,1.3 算法和算法描述, 有穷性。一个算法必须在有穷步之后结束,即必

10、须在有限时间内完成。 确定性。算法的每一步必须有确切的定义,无二义性。 可行性。算法中的每一步都可以通过已经实现的基本运算的有限次执行得以实现。 输入。一个算法具有零个或多个输入,这些输入取自特定的数据对象集合。 输出。一个算法具有一个或多个输出,这些输出同输入之间存在某种特定的关系。,1.3.1 算法与算法特性 算法(Algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列。一个算法应该具有下列特性:,2019年5月25日,14,一个好的算法通常要达到以下的要求:,正确。执行结果应当满足预先规定的功能和性能要求。 可读。应当思路清晰、层次分明、简单明了、易读易懂。 健壮。当输入不

11、合法数据时,应能作适当处理,不至引起严重后果。 高效。有效使用存储空间和有较高的时间效率。,1.3.2 算法描述 最简单的方法是使用自然语言,其优点是简单且便于人们对算法的阅读;缺点是转换成高级语言困难。 类C语言忽略高级程序设计语言中一些严格的语法规则与描述细节,因此它比程序设计语言更容易描述和被人理解,比自然语言更接近程序设计语言,很容易被转换成高级语言。,2019年5月25日,15,本书对所用类C语言作如下约定: 1问题的规模用MAXSIZE #define MAXSIZE 60,2预定义常量和类型: #define TRUE 1 #define FALSE 0 #define OK 1

12、 #define ERROR 0 #define OVERFLOW -1 typedef int Status;,3数据结构(存储结构)的表示用类型定义(typedef)描述。数据元素类型约定为 ElemType,由用户在使用该数据类型时自行定义。,例1.学生信息检索系统中,用一维数组作存储 n 个学生的信息,数组中的数据元素有4个域:学号、姓名、性别和成绩: typedef struct std_info long int Num; /* 学号域 */ char Name8; /* 姓名域 */ char Sex; /* 性别域 */ float Score; /* 成绩域 */ ElemT

13、ype ;,2019年5月25日,16,4基本操作的算法都用以下形式的函数描述 函数类型 函数名(函数参数表) /* 算法说明 */ 语句序列; /* 函数名 */,5C语言中的常用语句 赋值(=)、选择(if、if else、 switch case default)、循环(for、 while、do while)、结束(return、break、continue、exit)、输入和输出等语句。,6基本运算和基本函数 基本运算有+、-、*、/、%、-、&和 | 等。 基本函数有max、min、abs、fabs、eof 等。,2019年5月25日,17,例设某班级有n个学生,编写算法,查找班级

14、中成绩最高的学生,并输出该学生的所有信息。 分析:,算法依次查看数组中的元素,并保存当前最高成绩及其下标。使用类C语言编写:,int largest(ElemType SMAXSIZE,int n) float currlarge=0.0 ; int i, j=0; /* 赋初值 */ for (i=0 ; i currlarge) j=i; currlarge= Si.Score; printf(“%10ld%10s%10c%10fn”,Sj.Num, Sj. name,Sj.Sex, Sj. Score); /* largest */,typedef struct std_info lon

15、g int Num; char Name8; char Sex; float Score; ElemType ;,2019年5月25日,18,1.4 算法时空效率分析方法,评价算法的性能用时间复杂度与空间复杂度来度量。,1、算法的时间复杂度 算法的时间复杂度(Time complexity)是指算法转换为程序后(这里仍称为算法)在计算机上从开始运行到结束所需要的时间。运行所需要的时间取决于下列因素: 硬件的速度。与硬件的配置高低有关。 书写程序的语言。语言的级别越高,其执行效率就越低。 编译程序所生成目标代码的质量。 依据算法所选用的策略。 问题的规模。一般情况下,处理的数据量越大,执行的时间

16、相对也越长。,2019年5月25日,19,通常的做法是:不考虑不确定的情况,而以算法中简单操作重复执行的次数作为算法的时间度量。为此,一个特定算法的运行时间长短就只依赖于问题的规模n,或者说它是问题规模n的函数f (n)。,【例1-7】求累加求和 int sum(int b ,int n) int sum=0; /* 第1条定义并赋初值语句执行1次 */ for(int i=0;in;i+)/* 3n+2 次 */ sum+=bi; /* n次 */ return sum ; /* 返回语句执行1次 */,2019年5月25日,20,要精确地计算f (n)是困难的,引入渐进时间复杂度在数量上估计一个算法的执行时间。算法时间的度量记作 T(n)=(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号