1、数据结构,第一章 绪论,内容提要,(1)了解数据结构的定义和研究的方向。 (2)应使学生对算法的时间复杂度有所了解。,了解抽象数据类型的定义、表示和实现方法;类C语言的书写规范;算法五要素;计算语句频度和估算算法时间复杂度的方法,了解抽象数据类型的定义、表示和实现方法;计算语句频度和估算算法时间复杂度的方法,基本要求、重点、难点,1.1 数据结构概念,相互之间存在一种或多种特定关系的数据元素的集合称为数据结构,可表示为:,(数值或非数值),Data_Structure=(D, R),是指同一数据元素类型中各元素之间存在的关系。,元素有限集,关系有限集,集合结构: 仅同属一个集合线性结构: 一对
2、一(1:1) 树 结 构: 一对多(1:n)图 结 构: 多对多 (m:n),非线性,线 性,逻辑结构可细分为4类:,答: 是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。,解释1: 数据的逻辑结构,d1d5 d2d4 d3,该结构是非线性的。,上述表达式可用图形表示为:,例1 S=(D, R) , D= a, b, c, d, e, f , R=(a,e), (b,c), (c,a), (e,f), (f,d) 例2 设 S=(D, R) D=di | 1i5, R=(di , dj ), ij,答:物理结构亦称存储结构,是数据的逻辑结构在计算机存储
3、器内的表示(或映像)。它依赖于计算机。,存储结构可分为4大类:,例:复数3.02.3i 的两种存储方式:,顺序、链式、索引、散列,法1:地址 内容,法2:地址 内容,2字节,解释2:什么叫数据的物理结构?,顺序存储结构1.用一组连续的存储单元来存储 2.数据的逻辑前驱后继关系和物理存储位置一致,链式存储结构1.任意的存储单元来存储 2.逻辑关系和物理位置没有必然联系。,讨论:顺序存储与链式存储特点比较?,答:在数据的逻辑结构上定义的操作算法。 它在数据的存储结构上实现。,最常用的数据运算有 5 种:,插入、删除、修改、查找、排序,解释3:什么是数据的运算?,数据(data)所有能被计算机识别、
4、存储和处理的符号的集合(包括数字、字符、声音、图像等信息 )。 数据元素(data element)是数据的基本单位,具有完整确定的实际意义(又称元素、结点,顶点、记录等)。 数据项(Data item)构成数据元素的项目。是具有独立含义的最小标识单位(又称字段、域、属性 等)。,三者之间的关系:数据 数据元素 数据项,例:班级通讯录 个人记录 姓名、年龄,数据、数据元素和数据项,1.2 基本概念:,1.3 抽象数据类型的表现与实现,1.3.1 数据类型与抽象数据类型的区别? 1.3.2 抽象数据类型如何定义? 1.3.3 抽象数据类型如何表示和实现?,讨论:,抽象数据类型和伪码是学习数据结构
5、的工具,1.3.1 数据类型与抽象数据类型的区别,数据类型:是一个值的集合和定义在该值上的一组操作的总称。,抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作),它与数据类型实质上是一个概念,但其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机),1.3.2 抽象数据类型如何定义,抽象数据类型可以用以下的三元组来表示:ADT = (D,R,P),ADT抽象数据类型名 数据对象:数据关系: 基本操作 : ADT抽象数据类型名,ADT常用定义格式,数据对象,D上的关系集,D上的操作集,1.3.3 抽象数据类型如何表示和实现,抽象数据类
6、型可以通过固有的数据类型(如整型、实型、字符型等)来表示和实现。,注1 :它有些类似C语言中的结构(struct)类型,但增加了相关的服务。 注2 :教材中用类C语言(介于伪码和C语言之间)作为描述工具。其描述语法汇总在教材P10-11上。,但上机时要用具体语言实现,如C或C+等,1.4 算法效率的度量,1.4.1 什么是算法?如何评判算法的好坏? 1.4.2 时间复杂度和空间复杂度如何表示? 1.4.3 计算举例,讨论:,1.4.1 什么是算法?如何评判一个算法的好坏?,常用时间复杂度来衡量,算法的基本特性:,算法评价指标:,有穷性、确定性、可行性、必有输出,正确性、可读性、健壮性、效率与低
7、存储量需求,常用空间复杂度来衡量,程序设计的实质:好算法好结构,算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。,4个层次,注: 1) O()为渐近符号。 2) 空间复杂度S(n)按数量级递增顺序也与上表类似。,复杂度高,复杂度低,时间复杂度T(n)按数量级递增顺序为:,1.4.2 时间复杂度和空间复杂度如何表示?,多项式阶,大家来思考,问题,?,问题: 一个程序的时间复杂度O(fn)是确定的吗?,回答: 不是,一个程序的时间复杂度可以表示为多种方式。,3n+2=O(n) 因为 3n+24n for n26*2n+n2=O(2n) 因为6*2n+n2
8、 7*2n for n4,例:,渐进符号(O)的定义:当且仅当存在一个正的常数 C,使得对所有的 n n0 ,有 f(n) Cg(n),则: f(n) = O(g(n),1.4.3 计算举例,该算法的运行时间由程序中所有语句的频度(即该语句重复执行的次数)之和构成。,解:,分析:显然,语句的频度是1。设语句2的频度是f(n),则有:,算法的时间复杂度由嵌套最深层语句的频度决定,即f(n)log2n,取最大值f(n)=log2n,所以该程序段的时间复杂度T(n)=1+f(n)=1+ log2n= O( log2n),本章小结,数据结构课程 数据结构算法程序,涉及数学、计算机硬件和软件。 数据结构定义指互相有关联的数据元素的集合,可用data_Structure=(D,R)表示。 数据结构内容数据的逻辑结构、存储结构和基本运算 数据结构学习工具抽象数据类型和伪码(类C) 算法效率指标时间效率和空间效率,练习一下吧,基本概念 1.简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线 性结构、非线性结构。 2. 常用的存储表示方法有哪几种?,