数据结构课件第一章
什么叫数据的逻辑结构? 什么叫数据的逻辑结构?
指数据元素之间的逻辑关系。即从逻辑关系上描述数据, 答:指数据元素之间的逻辑关系。即从逻辑关系上描述数据, 它与数据的存储无关, 独立于计算机的 它与数据的存储无关,是独立于计算机的。逻辑结构可细 分为4类 分为 类:
集合结构: 集合结构: 仅同属一个集合 线性结构: 一对一( 线性结构 一对一(1:1) 树 结 构: 一对多( 一对多(1:n)
d
d1
d2
d3
四层
图 1-2 树形结构 示意图
3、图形结构示例 、
1 3 4 5 图 1-3 图形 结构示意图 2 6
1.1.2 基本概念及术语
什么是数据结构? 什么是数据结构? 教材P6 答: (见教材 ) 是相互之间存在一种或多种特 相互之间存在一种或多种特 关系的数据元素的集合 表示为: 的集合, 定关系 (m:n)
例:用图形表示下列数据结构,并指出它们是属于线 用图形表示下列数据结构, 性结构还是非线性结构。 性结构还是非线性结构。
(1) S=(D, R) ) D={ a, b, c, d, e, f } R={(a,e), (b,c), (c,a), (e,f), (f,d)}
1、数据类型与抽象数据类型的区别? 、数据类型与抽象数据类型的区别? 数据类型:是一个值的集合和定义在该值上的一组操 作的总称。 抽象数据类型:由用户定义,用以表示应用问题的数 据模型。它由基本的数据类型构成,并包括一组相关 的服务(或称操作)
它与数据类型实质上是一个概念, 它与数据类型实质上是一个概念,但其特征 使用与实现分离,实行封装 封装和 是使用与实现分离,实行封装和信息隐蔽 独立于计算机)。 (独立于计算机)。
的两种存储方式: 例:复数3.0-2.3i 的两种存储方式: 复数 -
法1:地址 : 内容 法2:地址 :
2字节 字节
内容
0300 0302
3.0 -2.3
0300 0302 0415
3.0 0415
-2.3
什么是数据的运算? 什么是数据的运算?
在数据的逻辑结构上定义的操作算法。 答 : 在数据的逻辑结构上定义的操作算法 。 它 在数据 的存储结构上实现。 的存储结构上实现。
上述表达式可用图形表示为: 解: 上述表达式可用图形表示为:
b
c
a
e
f
d
此结构为线性的 此结构为线性的。 线性
(2) S=(D, R) ) D={di | 1≤i≤5} R={(di , dj ), i<j}
解:上述表达式可用图形表示为: 上述表达式可用图形表示为:
d1 d5 d4 d3 d2
该结构是非线性的 该结构是非线性的。 是非线性
D上的操作集 上的操作集
ADT 常用 定义 格式
数据对象:<数据对象的定义> 数据对象: 对象 数据关系:<数据关系的定义> 数据关系: 数据关系的定义> 关系 基本操作 :<基本操作的定义> 基本操作的定义> 基本操作 } ADT抽象数据类型名 ADT抽象数据类型名 抽象数据类型
3、抽象数据类型如何表示和实现? 、抽象数据类型如何表示和实现? 表示和实现 抽象数据类型可以通过固有的数据类型(如整型、 实型、字符型等)来表示和实现。
常用时间复杂度来衡量 常用时间复杂度来衡量 时间复杂度
常用空间复杂度来衡量 常用空间复杂度来衡量 空间复杂度
例1:累加求和 : 原算法: 原算法:int sum(int b[ ],int n) { int s=0; = for(int i=0;i<n;i++) = s+=b[i]; = return s;} 分解算法: 分解算法: 简单操作次数: 简单操作次数: s=0 // 1 = i= i=0; // 1 mark1:if(i>=n) goto mark2; // n+1 s+=b[i]; // n = i++; // n goto mark1; // n mark2:return s; // 1 TC=f(n) =4n+4 =
例2 矩阵相加 原算法: 原算法: void add(int a[MS][MS], int b[MS][MS], int c[MS][MS],int n) //MS为大于等于 的常量 为大于等于n的常量 为大于等于 { int i,j; for (i=0;i<n;i++) = for (j=0;j<n;j++) = c[i][j] =a[i][j]+b[i][j]; }
三者之间的关系: 三者之间的关系:数据 > 数据元素 > 数据项
姓名、年龄…… 例:班级通讯录 > 个人记录 > 姓名、年龄
3、数据对象 数据对象(data object) ——性质相同的数据元素的集合 性质相同的数据元素的集合, 数据对象 性质相同的数据元素的集合 是数据的一个子集。 是数据的一个子集。 4、数据结构(data structure) 、数据结构 ◎数据结构有逻辑结构和物理结构之分。 数据结构有逻辑结构和物理结构之分。 ◎物理结构是一种逻辑结构在存储器中的存储方式,存 物理结构是一种逻辑结构在存储器中的存储方式, 贮方式有顺序、链接、索引、散列等多种, 贮方式有顺序、链接、索引、散列等多种,所以一种逻辑 结构可以采用多种物理结构存贮。 结构可以采用多种物理结构存贮。 ◎通常所说的数据结构就是指逻辑结构。 通常所说的数据结构就是指逻辑结构。 数据结构就是指逻辑结构
例:分析以下程序段的时间复杂度。 分析以下程序段的时间复杂度。
i=1; while(i<=n) i=i*2; ① ②
解: 该算法的运行时间由程序中所有语句的频度(即该语 该算法的运行时间由程序中所有语句的频度 频度(
句重复执行的次数)之和构成 构成。 句重复执行的次数)之和构成。
算法的时间复杂度是由嵌套最深层语句的频度决定的。 算法的时间复杂度是由嵌套最深层语句的频度决定的。 嵌套最深层语句的频度决定的
2、抽象数据类型如何定义? 、抽象数据类型如何定义? 定义
抽象数据类型可以用以下的三元组来表示: 抽象数据类型可以用以下的三元组来表示: 可以用以下的三元组来表示 ADT = (D,S,P) , , )
数据对象 D上的关系集 上的关系集
ADT抽象数据类型名{ ADT抽象数据类型名{ 抽象数据类型名
1、数据(data)—所有能被计算机识别、存储和处理的符 、数据 所有能被计算机识别、 所有能被计算机识别 号的集合(包括数字、字符、声音、 号的集合(包括数字、字符、声音、图像等信息 )。 2、数据元素(data element)—是数据的基本单位,具有完整 、数据元素 是数据的基本单位, 是数据的基本单位 确定的实际意义(又称元素 结点,顶点、记录等)。 又称元素、 确定的实际意义 又称元素、结点,顶点、记录等)。 数据项(data item)——构成数据元素的项目。是具有独立 数据项 构成数据元素的项目。 构成数据元素的项目 含义的最小标识单位(又称字段、 最小标识单位 含义的最小标识单位(又称字段、域、属性 等)。
Data_Structure=(D, S) ( )
(数值或非数值)
元素有限集 关系有限集
或:是指同一数据元素类中各元素之间存在的关系。 是指同一数据元素类中各元素之间存在的关系。
亦可表示为: =( =(D, ) 亦可表示为:S=( R)或 B=(K, R) ( )
术语:数据、数据元素、数据项、 术语:数据、数据元素、数据项、数据对象
同样的数据对象,用不同的数据结构来表示, 同样的数据对象,用不同的数据结构来表示, 运算效率可能有明显的差异。 运算效率可能有明显的差异。
程序设计实质=好算法+ 程序设计实质=好算法+好结构
1.1 数据结构的定义
1、线性表示例 、
2、树形结构示例 、
Tt
一层
a
b
c
二层 三层
a1
a2
b1
b2
c1
c2
分解算法: 分解算法:
简单操作次数: 简单操作次数: i=0; // 1 = mark1:if(!(i<n)) goto mark4; // n+1 j=0; // n = mark2:if(!(j<n)) goto mark3; // n(n+1) c[i][j] =a[i][j]+b[i][j]; // n﹡n ﹡ j++; // n﹡n ﹡ goto mark2; // n﹡n ﹡ mark3:i++ // n goto mark1; // n mark4: ; TC=f(n) =4n + 5n + 2 =
3、空间复杂性(Space Complexity) 、空间复杂性( )
◎算法运行中占用空间包括算法本身占用,输入输出数据 算法运行中占用空间包括算法本身占用, 占用和运行中的临时占用。 占用和运行中的临时占用。 ◎同一个问题,算法不同,运行中的临时空间不同,即空 同一个问题,算法不同,运行中的临时空间不同, 间复杂性不同。 间复杂性不同。 ◎C只考虑在运行中为局部变量分配的存贮空间的大小, 只考虑在运行中为局部变量分配的存贮空间的大小, 只考虑在运行中为局部变量分配的存贮空间的大小 一般也以数量级表示。 一般也以数量级表示。
1.3 算法描述和分析
讨论: 讨论: 1. 什么是算法?如何评判一个算法的好坏? 什么是算法?如何评判一个算法的好坏? 2. 时间复杂度和空间复杂度如何表示? 时间复杂度和空间复杂度如何表示? 3. 计算举例
程序设计实质=好算法+ 程序设计实质=好算法+好结构
1. 什么是算法?如何评判一个算法的好坏? 什么是算法?如何评判一个算法的好坏?