数据结构(C语言版)(严蔚敏)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
…….
按作者名
001,… 002,…. 004,…. …….
L S ……
002,… 001,003, ……
6
树
–例
井字棋
……..
……..
7
…...
…...
…...
…...
–例
多叉路口交通灯管理问题
图
AB
AC
AΒιβλιοθήκη Baidu B
C D
BA
BC
BD
DA EA EB
DB EC
DC A ED
E
8
1.1 数据结构的概念
15
四个基本结构
•
集合
•
线性结构
•
树形结构
•
网状结构
16
数据结构的形式定义为: 数据结构的形式定义为:数据结构是一 个二元组 Data__Structure(D,S)
其中:D是数据元素的有限集 S是D上关系的有限集 例:在计算机科学中,复数可取如下定义:复数 可取如下定义:复数是是一种数据结构 Complex=(C,R)
5
–例
书目自动检索系统
线性表
书目文件
书目卡片 001 高等数学 樊映川 002 理论力学 罗远祥 登录号: 003 高等数学 华罗庚 004 书名: 线性代数 栾汝书 …… 作者名: …… ……
按书名
高等数学 理论力学 线性代数 ……
S01 L01 S01 S02 ……
索引表
按分类号
分类号: 001, 003… … 樊映川 出版单位: 002, … … .. 华罗庚 出版时间: 004, … … 栾汝书 价格: … … ..
29
2、可读性 、
算法主要是为了人的阅读与交流,其次才是为计 算机执行。因此算法应该易于人的理解;另一方 面,晦涩难读的程序易于隐藏较多错误而难以调 试;
30
3.健壮性 健壮性
当输入的数据非法时,算法应当恰当地作出反映 或进行相应处理,而不是产生莫名奇妙的输出结 果。并且,处理出错的方法不应是中断程序的执 行,而应是返回一个表示错误或错误性质的值, 以便在更高的抽象层次上进行处理。
Data Structure
数据结构( 语言版 语言版) 数据结构(C语言版)
课程安排
总学时: 总学时:30 教材:《数据结构C语言版 严蔚敏、 :《数据结构 语言版》 教材:《数据结构 语言版》严蔚敏、吴伟民
-----清华大学出版社 清华大学出版社
2
第一章 绪论
1.1 数据结构的概念 1.2 基本概念和术语 1.3 算法和算法分析
12
1.2 基本概念和术语
数据对象(Data Object): 数据对象 : 性质相同的数据元素的集合。是数据的一个子集。 性质相同的数据元素的集合。是数据的一个子集。
整数数据对象
N = { 0, ±1, ±2, … }
字母字符数据对象 C={ ‘A’, ‘B’, ‘C’, … ‘F’ }
13
什么是数据结构
数据元素(Data Element): 数据元素 数据的基本单位,在计算机程序中通常作为一个 数据的基本单位, 基本单位 整体进行考虑和处理。 整体进行考虑和处理。 一个数据元素可由若干个数据项组成。 一个数据元素可由若干个数据项组成。数据项 数据项组成 是数据的不可分割的最小标识单位 最小标识单位。 是数据的不可分割的最小标识单位。
算法的概念和描述: 算法的概念和描述:
一个算法必须满足以下五个准则: 一个算法必须满足以下五个准则: (1)有穷性 (2)确定性 (3)可(能)行性 (4)输入 (5)输出
25
1、有穷性 对于任意一个组合法输入值,在执行有穷步 骤之后一定能结束,即:算法中的每个步骤都能在有限 时间内完成; 2、确定性 对于每种情况下所应执行的操作,在算法中 都有确切的规定,使算法的执行者或阅读者都能明确其 含义及如何执行。并且在任何条件下,算法都只有一条 执行路径; 3、可行性 算法中的所有操作都必须足够基本,都可以 通过已经实现的基本操作运算有限次实现之;
9
1.1 数据结构的概念
数据结构课程》 《数据结构课程》 所处的地位: 所处的地位:
10
1.2 基本概念和术语
数据(Data): 数据 对信息的一种符号表示。在计算机科学中是指所有 对信息的一种符号表示。 能输入到计算机中并被计算机程序处理的符号的总 称。 数值型数据 非数值型数据
11
1.2 基本概念和术语
21
如前所述,抽象数据类型的定义由一个值域和定 义在该值域上的一组操作组成。若按其值的不同 特性,可细分为下列三种类型: 原子类型 固定聚合类型 可变聚合类型
22
抽象数据类型可用以下三元组表示 (D,S,P) 本书采用以下格式定义抽象数据类型: ADT抽象数据类型名{ 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 }ADT抽象数据类型名
设计算法时,通常应考虑达到以下目标: 1、正确性 2、可读性 3、健壮性 4、效率与低存储量需求
28
1、正确性 、
首先,算法应当满足以特定的“规格说明”方式 给出需求。 其次,对算法是否“正确”的理解可以有以下四个 层次: A.程序中不含语法错误; B.程序对于几组输入数据能够得出满足要求的结果; 通常以第C层意义的正确性作为衡量一个算法是否 合格的标准。
23
1.3 算法和算法分析
算法的概念和描述: 算法的概念和描述: 什么是算法? 什么是算法? 算法( 算法(Algorithm)是为了解决某类问题而规定的一 是为了解决某类问题而规定的一 个有限长的操作序列。 个有限长的操作序列。一个算法必须满足以下五 个重要特性: 个重要特性:
24
1.3 算法和算法分析
数据结构课程的形成和发展: 数据结构课程的形成和发展:
形成阶段: 形成阶段: 60年代初期 年代初期, 数据结构” 60年代初期,“数据结构”有关的内容散见于操作 系统、编译原理和表处理语言等课程。1968年 系统、编译原理和表处理语言等课程。1968年, 数据结构” “数据结构”被列入美国一些大学计算机科学系的 教学计划。 教学计划。 发展阶段: 发展阶段: 数据结构的概念不断扩充,包括了网络、 数据结构的概念不断扩充,包括了网络、集合代数 关系等“离散数学结构”的内容。 论、关系等“离散数学结构”的内容。 70年代后期 我国高校陆续开设该课程。 年代后期, 70年代后期,我国高校陆续开设该课程。
35
从算法中选取一种对于所研究的问题来说是基本 操作的原操作,以该基本操作在算法中重复执行 的次数作为算法运行时间的衡量准则。
36
例一
For(i=1;i<=n;++i) for(j=1;j<=n;++j){ c[I,j]=0; for(k=1;k<=n;++k) c[I,j]+=a[I,k]*b[k,j]; } 基本操作:乘法操作 3 时间复杂度:O(n )
18
1.2 基本概念和术语
逻辑结构--逻辑结构--数据元素间抽象化的相互关系(简称为数据结构)。 数据元素间抽象化的相互关系(简称为数据结构)。 与数据的存储无关,独立于计算机, 与数据的存储无关,独立于计算机,它是从具体问题抽 象出来的数学模型。 象出来的数学模型。
存储结构(物理结构) 存储结构(物理结构)---数据元素及其关系在计算机存储器中的存储方式。 数据元素及其关系在计算机存储器中的存储方式。 是逻辑结构用计算机语言的实现,它依赖于计算机语言。 是逻辑结构用计算机语言的实现,它依赖于计算机语言。
定义1---定义
是相互之间存在一种或多种特定关系的数据元素的集 合。
定义2---定义
按某种逻辑关系组织起来的一批数据( 按某种逻辑关系组织起来的一批数据(或称带结构 组织起来的一批数据 的数据元素的集合)应用计算机语言并按一定的存储 的数据元素的集合)应用计算机语言并按一定的存储 把它们存储在计算机的存储器中, 方式把它们存储在计算机的存储器中 表示 方式把它们存储在计算机的存储器中,并在其 上定义了一个运算的集合。 上定义了一个运算的集合。
3
“数据结构”学科形成和发展背景 数据结构” 数据结构
自1946年第一台计算机问世以来,计算机产业的飞 速发展已远远超出人们对它的预料。如今,计算要 已深入到人类社会的各个领域。计算机的应用已不 再局限于科学计算,而更多地用于控制、管理及数 据处理等非数值计算的处理工作。与此相应,计算 机加工处理的对象由纯粹的数值发展到字符、表格 和图象等各种具有一定结构的数据,这就给程序设 计带来一些新的问题。为了编写一些“好”的程序, 必须分析待处理对象的特性以及各处理对象间的关 系。这就是“数据结构”这门学科形成和发展的背 景。
26
4、输入 作为算法加工对象的量值,通常体现 为算法中的一组变量。有些输入量需要在算法执 行过程中输入,而有的算法表面上可以没有输入, 实际上已被嵌入算法之中; 5、输出 它是一组与“输入”与确定关系的量 值,是算法进行信息加工后得到的结果,这种确 定关系即为算法的功能。
27
二、算法设计的原则
31
4、效率与低存储量需求 、
通常,效率指的是算法执行时间;存储量指的是 算法执行过程中所需要的最大存储空间。两者都 与问题的规模有关。
32
算法效率的衡量方法和准则
通常有两种衡量算法效率的方法: 事后统计法 缺点:1、必须执行程序 2、其它因素掩盖算法本质 事后分析估算法 和算法执行时间相关的因素: 1算法选用的策略 2、问题的规模 3、编写程序的语言 4、编译程序产生的机器代码的质量 5、计算机执行指令的速度
14
1.2 基本概念和术语
一、集合:结构中的数据元素除了同属于一种类型 集合: 别无其它关系。 外,别无其它关系。 线性结构: 二、线性结构:结构中的数据元素之间存在一对一 的关系,如线性表、 队列。 的关系,如线性表、栈、队列。 三、树型结构:结构中的数据元素之间存在一对多 树型结构: 的关系,如树。 的关系,如树。 图状结构或网状结构: 四、图状结构或网状结构:结构中的数据元素之间 存在多对多的关系,如图。 存在多对多的关系,如图。
19
数据元素之间的关系在计算机中有两种不同的表 示方法:顺序映象和非顺序映象 顺序映象和非顺序映象,并由此得到 顺序映象和非顺序映象 两种不同的存储:顺序存储结构和链式存储结 顺序存储结构和链式存储结 构。
20
数据类型:是和数据结构密切相关的一个概念, 它最早出现在高级程序语言中,用以刻画(程序) 操作对象的特性。 按“值”的不同特性,高级程序语言中的数据类 型可分为两类:一类是非结构的原子类型 原子类型。原子 原子类型 类型的值是不可分解的。另一类是结构类型 结构类型。结 结构类型 构类型的值是由若干成分按某种结构组成的,因 此是可以分解的,并且它的成分可以是非结构的, 也可以是结构的。
33
假如,随着问题规模n的增长,算法执行时间的 增长率和f(n)的增长率相同,则可记作: T(n)=o(f(n)) 称T(n)为算法的(渐近)时间复杂度
34
算法=控制结构+原操作(固有数据类型的操作) 算法的执行时间= ∑原操作(i)的执行次数*原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之各 成正比
4
1.1什么是数据结构 什么是数据结构
数值计算解决问题的一般步骤: 数值计算解决问题的一般步骤: 数学模型→选择计算机语言 编出程序→测试 选择计算机语言→编出程序 测试→最终解 数学模型 选择计算机语言 编出程序 测试 最终解 答。 数值计算的关键是:如何得出数学模型(方程)? 数值计算的关键是:如何得出数学模型(方程)? 程序设计人员比较关注程序设计的技巧。 程序设计人员比较关注程序设计的技巧。 非数值计算问题: 非数值计算问题: 数据元素之间的相互关系一般无法用数学方程加以描述
37
17
例:假设我们需要编制一个事务管理的程序, 假设我们需要编制一个事务管理的程序, 管理学校科学研究课题小组的各项事务, 管理学校科学研究课题小组的各项事务,则 首先要为程序的操作对象——课题小组设计 首先要为程序的操作对象 课题小组设计 一个数据结构。 一个数据结构。
假设每个小组由一位教师、一至三名研究生及一 至六名本科生组成,小组成员之间的关系是:教 师指导研究生,而由每位研究指导一至两名本科 生。则可以如下定义数据结构: Group=(P,R)
按作者名
001,… 002,…. 004,…. …….
L S ……
002,… 001,003, ……
6
树
–例
井字棋
……..
……..
7
…...
…...
…...
…...
–例
多叉路口交通灯管理问题
图
AB
AC
AΒιβλιοθήκη Baidu B
C D
BA
BC
BD
DA EA EB
DB EC
DC A ED
E
8
1.1 数据结构的概念
15
四个基本结构
•
集合
•
线性结构
•
树形结构
•
网状结构
16
数据结构的形式定义为: 数据结构的形式定义为:数据结构是一 个二元组 Data__Structure(D,S)
其中:D是数据元素的有限集 S是D上关系的有限集 例:在计算机科学中,复数可取如下定义:复数 可取如下定义:复数是是一种数据结构 Complex=(C,R)
5
–例
书目自动检索系统
线性表
书目文件
书目卡片 001 高等数学 樊映川 002 理论力学 罗远祥 登录号: 003 高等数学 华罗庚 004 书名: 线性代数 栾汝书 …… 作者名: …… ……
按书名
高等数学 理论力学 线性代数 ……
S01 L01 S01 S02 ……
索引表
按分类号
分类号: 001, 003… … 樊映川 出版单位: 002, … … .. 华罗庚 出版时间: 004, … … 栾汝书 价格: … … ..
29
2、可读性 、
算法主要是为了人的阅读与交流,其次才是为计 算机执行。因此算法应该易于人的理解;另一方 面,晦涩难读的程序易于隐藏较多错误而难以调 试;
30
3.健壮性 健壮性
当输入的数据非法时,算法应当恰当地作出反映 或进行相应处理,而不是产生莫名奇妙的输出结 果。并且,处理出错的方法不应是中断程序的执 行,而应是返回一个表示错误或错误性质的值, 以便在更高的抽象层次上进行处理。
Data Structure
数据结构( 语言版 语言版) 数据结构(C语言版)
课程安排
总学时: 总学时:30 教材:《数据结构C语言版 严蔚敏、 :《数据结构 语言版》 教材:《数据结构 语言版》严蔚敏、吴伟民
-----清华大学出版社 清华大学出版社
2
第一章 绪论
1.1 数据结构的概念 1.2 基本概念和术语 1.3 算法和算法分析
12
1.2 基本概念和术语
数据对象(Data Object): 数据对象 : 性质相同的数据元素的集合。是数据的一个子集。 性质相同的数据元素的集合。是数据的一个子集。
整数数据对象
N = { 0, ±1, ±2, … }
字母字符数据对象 C={ ‘A’, ‘B’, ‘C’, … ‘F’ }
13
什么是数据结构
数据元素(Data Element): 数据元素 数据的基本单位,在计算机程序中通常作为一个 数据的基本单位, 基本单位 整体进行考虑和处理。 整体进行考虑和处理。 一个数据元素可由若干个数据项组成。 一个数据元素可由若干个数据项组成。数据项 数据项组成 是数据的不可分割的最小标识单位 最小标识单位。 是数据的不可分割的最小标识单位。
算法的概念和描述: 算法的概念和描述:
一个算法必须满足以下五个准则: 一个算法必须满足以下五个准则: (1)有穷性 (2)确定性 (3)可(能)行性 (4)输入 (5)输出
25
1、有穷性 对于任意一个组合法输入值,在执行有穷步 骤之后一定能结束,即:算法中的每个步骤都能在有限 时间内完成; 2、确定性 对于每种情况下所应执行的操作,在算法中 都有确切的规定,使算法的执行者或阅读者都能明确其 含义及如何执行。并且在任何条件下,算法都只有一条 执行路径; 3、可行性 算法中的所有操作都必须足够基本,都可以 通过已经实现的基本操作运算有限次实现之;
9
1.1 数据结构的概念
数据结构课程》 《数据结构课程》 所处的地位: 所处的地位:
10
1.2 基本概念和术语
数据(Data): 数据 对信息的一种符号表示。在计算机科学中是指所有 对信息的一种符号表示。 能输入到计算机中并被计算机程序处理的符号的总 称。 数值型数据 非数值型数据
11
1.2 基本概念和术语
21
如前所述,抽象数据类型的定义由一个值域和定 义在该值域上的一组操作组成。若按其值的不同 特性,可细分为下列三种类型: 原子类型 固定聚合类型 可变聚合类型
22
抽象数据类型可用以下三元组表示 (D,S,P) 本书采用以下格式定义抽象数据类型: ADT抽象数据类型名{ 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 }ADT抽象数据类型名
设计算法时,通常应考虑达到以下目标: 1、正确性 2、可读性 3、健壮性 4、效率与低存储量需求
28
1、正确性 、
首先,算法应当满足以特定的“规格说明”方式 给出需求。 其次,对算法是否“正确”的理解可以有以下四个 层次: A.程序中不含语法错误; B.程序对于几组输入数据能够得出满足要求的结果; 通常以第C层意义的正确性作为衡量一个算法是否 合格的标准。
23
1.3 算法和算法分析
算法的概念和描述: 算法的概念和描述: 什么是算法? 什么是算法? 算法( 算法(Algorithm)是为了解决某类问题而规定的一 是为了解决某类问题而规定的一 个有限长的操作序列。 个有限长的操作序列。一个算法必须满足以下五 个重要特性: 个重要特性:
24
1.3 算法和算法分析
数据结构课程的形成和发展: 数据结构课程的形成和发展:
形成阶段: 形成阶段: 60年代初期 年代初期, 数据结构” 60年代初期,“数据结构”有关的内容散见于操作 系统、编译原理和表处理语言等课程。1968年 系统、编译原理和表处理语言等课程。1968年, 数据结构” “数据结构”被列入美国一些大学计算机科学系的 教学计划。 教学计划。 发展阶段: 发展阶段: 数据结构的概念不断扩充,包括了网络、 数据结构的概念不断扩充,包括了网络、集合代数 关系等“离散数学结构”的内容。 论、关系等“离散数学结构”的内容。 70年代后期 我国高校陆续开设该课程。 年代后期, 70年代后期,我国高校陆续开设该课程。
35
从算法中选取一种对于所研究的问题来说是基本 操作的原操作,以该基本操作在算法中重复执行 的次数作为算法运行时间的衡量准则。
36
例一
For(i=1;i<=n;++i) for(j=1;j<=n;++j){ c[I,j]=0; for(k=1;k<=n;++k) c[I,j]+=a[I,k]*b[k,j]; } 基本操作:乘法操作 3 时间复杂度:O(n )
18
1.2 基本概念和术语
逻辑结构--逻辑结构--数据元素间抽象化的相互关系(简称为数据结构)。 数据元素间抽象化的相互关系(简称为数据结构)。 与数据的存储无关,独立于计算机, 与数据的存储无关,独立于计算机,它是从具体问题抽 象出来的数学模型。 象出来的数学模型。
存储结构(物理结构) 存储结构(物理结构)---数据元素及其关系在计算机存储器中的存储方式。 数据元素及其关系在计算机存储器中的存储方式。 是逻辑结构用计算机语言的实现,它依赖于计算机语言。 是逻辑结构用计算机语言的实现,它依赖于计算机语言。
定义1---定义
是相互之间存在一种或多种特定关系的数据元素的集 合。
定义2---定义
按某种逻辑关系组织起来的一批数据( 按某种逻辑关系组织起来的一批数据(或称带结构 组织起来的一批数据 的数据元素的集合)应用计算机语言并按一定的存储 的数据元素的集合)应用计算机语言并按一定的存储 把它们存储在计算机的存储器中, 方式把它们存储在计算机的存储器中 表示 方式把它们存储在计算机的存储器中,并在其 上定义了一个运算的集合。 上定义了一个运算的集合。
3
“数据结构”学科形成和发展背景 数据结构” 数据结构
自1946年第一台计算机问世以来,计算机产业的飞 速发展已远远超出人们对它的预料。如今,计算要 已深入到人类社会的各个领域。计算机的应用已不 再局限于科学计算,而更多地用于控制、管理及数 据处理等非数值计算的处理工作。与此相应,计算 机加工处理的对象由纯粹的数值发展到字符、表格 和图象等各种具有一定结构的数据,这就给程序设 计带来一些新的问题。为了编写一些“好”的程序, 必须分析待处理对象的特性以及各处理对象间的关 系。这就是“数据结构”这门学科形成和发展的背 景。
26
4、输入 作为算法加工对象的量值,通常体现 为算法中的一组变量。有些输入量需要在算法执 行过程中输入,而有的算法表面上可以没有输入, 实际上已被嵌入算法之中; 5、输出 它是一组与“输入”与确定关系的量 值,是算法进行信息加工后得到的结果,这种确 定关系即为算法的功能。
27
二、算法设计的原则
31
4、效率与低存储量需求 、
通常,效率指的是算法执行时间;存储量指的是 算法执行过程中所需要的最大存储空间。两者都 与问题的规模有关。
32
算法效率的衡量方法和准则
通常有两种衡量算法效率的方法: 事后统计法 缺点:1、必须执行程序 2、其它因素掩盖算法本质 事后分析估算法 和算法执行时间相关的因素: 1算法选用的策略 2、问题的规模 3、编写程序的语言 4、编译程序产生的机器代码的质量 5、计算机执行指令的速度
14
1.2 基本概念和术语
一、集合:结构中的数据元素除了同属于一种类型 集合: 别无其它关系。 外,别无其它关系。 线性结构: 二、线性结构:结构中的数据元素之间存在一对一 的关系,如线性表、 队列。 的关系,如线性表、栈、队列。 三、树型结构:结构中的数据元素之间存在一对多 树型结构: 的关系,如树。 的关系,如树。 图状结构或网状结构: 四、图状结构或网状结构:结构中的数据元素之间 存在多对多的关系,如图。 存在多对多的关系,如图。
19
数据元素之间的关系在计算机中有两种不同的表 示方法:顺序映象和非顺序映象 顺序映象和非顺序映象,并由此得到 顺序映象和非顺序映象 两种不同的存储:顺序存储结构和链式存储结 顺序存储结构和链式存储结 构。
20
数据类型:是和数据结构密切相关的一个概念, 它最早出现在高级程序语言中,用以刻画(程序) 操作对象的特性。 按“值”的不同特性,高级程序语言中的数据类 型可分为两类:一类是非结构的原子类型 原子类型。原子 原子类型 类型的值是不可分解的。另一类是结构类型 结构类型。结 结构类型 构类型的值是由若干成分按某种结构组成的,因 此是可以分解的,并且它的成分可以是非结构的, 也可以是结构的。
33
假如,随着问题规模n的增长,算法执行时间的 增长率和f(n)的增长率相同,则可记作: T(n)=o(f(n)) 称T(n)为算法的(渐近)时间复杂度
34
算法=控制结构+原操作(固有数据类型的操作) 算法的执行时间= ∑原操作(i)的执行次数*原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之各 成正比
4
1.1什么是数据结构 什么是数据结构
数值计算解决问题的一般步骤: 数值计算解决问题的一般步骤: 数学模型→选择计算机语言 编出程序→测试 选择计算机语言→编出程序 测试→最终解 数学模型 选择计算机语言 编出程序 测试 最终解 答。 数值计算的关键是:如何得出数学模型(方程)? 数值计算的关键是:如何得出数学模型(方程)? 程序设计人员比较关注程序设计的技巧。 程序设计人员比较关注程序设计的技巧。 非数值计算问题: 非数值计算问题: 数据元素之间的相互关系一般无法用数学方程加以描述
37
17
例:假设我们需要编制一个事务管理的程序, 假设我们需要编制一个事务管理的程序, 管理学校科学研究课题小组的各项事务, 管理学校科学研究课题小组的各项事务,则 首先要为程序的操作对象——课题小组设计 首先要为程序的操作对象 课题小组设计 一个数据结构。 一个数据结构。
假设每个小组由一位教师、一至三名研究生及一 至六名本科生组成,小组成员之间的关系是:教 师指导研究生,而由每位研究指导一至两名本科 生。则可以如下定义数据结构: Group=(P,R)