数据结构第一章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据
所有能被输入到计算机中,且能被计 算机处理的符号(数字、字符等)的集合。
是计算机操作的对象的总称。
是计算机处理的信息的某种特定的
符号表示形式。
数据元素
是数据(集合)中的一个 “个体”, 在计算机中通常作为一个整体进行考 虑和处理。是数据结构中讨论的基本 单位。
例如,整数“5”,字符“N”等。
“数据抽象” 和“数据封装”
数据抽象 用ADT描述程序处理的实体
时,强调的是其本质的特征、其所能 完成的功能以及它和外部用户的接口 (即外界使用它的方法)。
数据封装 将实体的外部特性和其内部
实现细节分离,并且对外部用户隐藏
其内部实现细节
抽象数据类型的描述方法
ADT =(D,S,P)
其中: D 是数据对象, S 是 D 上的关系集, P 是对 D 的基本操作集。
须对程序中出现的每个变量、常量或表
达式,明确说明它们所属的数据类型。 例如,C 语言中的基本数据类型有:
字符型 char、整型 int 和 实型(浮点型
float和双精度型 double)
数据类型是一个“值”的集合和
定义在此集合上的 “一组操作” 的
总称。 对程序员而言,各种语言中的整数类型 都是一样的,因为它们的数学特性相同。
从这个意义上可称“整数” 是一个抽 象数据类型。 抽象数据类型和数据类型的实质相同,
范畴更广,不局限于语言中的数据类型。
抽象数据类型
(Abstract Data Type 简称ADT) 是指一个数学模型以及定义在该模型 上的一组操作。
通常称语言中已经实现的数据类型为固有 数据类型。
抽象数据类型有两个重要特征:
程序设计: 为计算机处理问题编制 一组指令集 算法:
处理问题的策略
数据结构: 问题的数学模型
当今计算机应用的特点:
l 所处理的数据量大且具有一定的关系;
l •
•
对其操作不再是单纯的数值计算,而更 应用举例1——学籍档案管理
假设一个学籍档案管理系统应包含如下表
多地是需要对其进行组织、管理和检索。
1-1所示的学生信息。
InitComplex(z2,4.0,3.0);
Add(z1,z2,z3);
Multiply(z1,z2,z4);
if (Division (z4,z3,z)) {
GetReal (z, RealPart);
GetImag (z, ImagPart);
}//if
ADT 抽象数据类型名 { 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 其中基本操作的定义格式为:
操作结果:构造复数 Z,其实部和虚部 分别被赋以参数 v1 和 v2 的值。
DestroyComplex( &Z) 操作结果:复数 Z 被销毁。 GetReal( Z, &realPart ) 初始条件:复数 Z 已存在。 操作结果:用 realPart 返回复数 Z 的实部值。
GetImag( Z, &ImagPart ) 初始条件:复数已存在。 操作结果:用ImagPart 返回复数 Z 的虚部值。 Add( z1,z2, &sum ) 初始条件:z1, z2是复数。 操作结果:用sum 返回两个复数 z1, z2 的和值。
班主任 班长1 舍长1 学 生 1 学 生 2 学 生 3 学 生 4 舍长k 舍长k+1 班长2 舍长p 学 学 学 学 生 生 生 生 n-3 n-2 n-1 n
…………
数据结构的形式定义描述为:
数据结构是一个二元组 Data_Structures = (D, S)
其中: D 是数据元素的有限集,
学 号 99070101 99070102 99070103 99070104
......
姓 名 李 军 王颜霞 孙 涛 单晓宏
......
学生基本情况 性 别 出生年月 男 80.12 女 81.2 男 80.9 男 81.3
...... ......
...... ...... ....... ...... ...... ......
顺序映象
以 x 和 y 之间相对的存储位置表示后继关系 例如:令 y 的存储位置和 x 的存储位置之间 相差一个预设常量 C,而 C 是一个隐含值,
x
y
存储结构中只包含数据元素本身的信息
链式映象
以附加信息(指针)表示后继关系
需要用一个和 x 绑定在一起的附加信息 (指针)指示 y 的存储位置
y
x
以“由数据元素 x 的存储映象和附加的
对象是一个含三个数据元素{a1,a2,a3} 的集合,且三者之间存在下列 “次序” 关系: {a1, a2、a2, a3} 。
3214,6587,9345 ─ a1(3214),a2(6587),a3(9345)
又如,在 2 行 3 列的二维数组中六个元素 {a1, a2, a3, a4, a5, a6} 之间存在着两个关系: “行” 的次序关系:
数据对象是特性相同的数据元素
的集合,是数据的一个子集。
例如,抽象数据类型“复数”的定义:
ADT Complex {
数据对象: D={e1,e2|e1,e2∈RealSet } 数据关系:
R1={<e1,e2> | e1是复数的实数部分,
| e2 是复数的虚数部分 }
基本操作:
InitComplex( &Z, v1, v2 )
课程先后关系的图形描形式:
c4 c5
c2
c1 c3 c12 c9 c10
c7
c8
c6
c11 图 1-2 计算机专业必修课程开设先后关系
特点 • 课程之间的先后关系用图结构描述; • 通过实施创建图结构,按要求将图结构中的顶点进 行线性排序。
结论 • 计算机的操作对象的关系更加复杂,操作形式不 再是单纯的数值计算,而更多地是对这些具有一定关 系的数据进行组织管理,我们将此称为非数值性处理。 要使计算机能够更有效地进行这些非数值性处理,就 必须弄清楚这些操作对象的特点,在计算机中的表示 方式以及各个操作的具体实现手段。这些就是《数据 结构》这门课程研究的主要内容。
数据对象
具有相同特性的数据元素的集合。
如:整数、实数等。
数据结构
有一个特性相同的数据元素的集合, 如果在数据元素之间存在一种或多种 特定的关系,则称为一个数据结构。
带结构的数据元素的集合
指的是数据元素之间存在的关系
例如,可用三个 4 位的十进制数表示 一个含 12 位数的“长整数” 。
对长整数进行运算的程序中的操作
1
12
21
312
132
123
321
231
213
特点: • 在求解过程中,所处理的数据之间具有层次关系, 这是我们所说的树形结构; • 对它的操作有:建立树形结构,输出最低层结点内 容等等。 • • 应用举例3——制定教学计划 • 在制定教学计划时,需要考虑各门课程的开 设顺序。有些课程需要先导课程,有些课程则不需 要,而有些课程又是其他课程的先导课程。比如, 计算机专业课程的开设情况如下表1-2所示:
row = {<a1,a2>,<a2,a3>,<a4,a5>,<a5,a6>}
a1 a2 a3 a4 a5 a6
“列” 的次序关系:
col = {<a1,a4>,<a2,a5>,<a3,a6>}
在含 6 个数据元素{a1, a2, a3, a4, a5, a6}
的集合上存在如下的次序关系:
{<ai, ai+1>| i=1, 2, 3, 4, 5}
S 是 D上关系的有限集。
从关系或结构分,数据结构可归结为 以下四类:
线性结构 树形结构 图状结构
集合结构
数据结构包括“逻辑结构” 和“物理结
构”两个方面(层次): 逻辑结构 是对数据元素之间的逻辑关系
的描述,它可以用一个数据元素的集合和 定义在此集合上的若干关系来表示;
物理结构 wk.baidu.com逻辑结构在计算机中的表示
则构成“一维数组” 。 可见,不同的“关系”构成不同的“结构” “数据结构” 是相互之间存在着某种
逻辑关系的数据元素的集合。
可用如下的数据结构描述“班集体”:
{ 班主任,班长1,班长2,舍长1,……,舍长p, 学生1,学生2,……,学生n }
{ <班主任,班长1>,<班主任,班长2>,<班长1,舍长1>, ……,<班长2,舍长p>, <舍长1,学生1>, <舍长1,学生2>,……,<舍长p,学生n> }
表1-2 计算机专业学生的必修课程
课程编号 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 课程名称 程序设计基础 离散数学 数据结构 汇编语言 算法分析与设计 计算机组成原理 编译原理 操作系统 高等数学 线性代数 普通物理 数值分析
需要的先导课程 编号 无 C1 C1,C2 C1 C3,C4 C11 C5,C3 C3,C6 无 C9 C9 C9,C10,C1
定义“学生”为: typedef struct { char id[8]; char name[16]; char sex; DateType bdate; } Student;
// 学号 // 姓名 // 性别‘M/F’:男/女 // 出生日期 // 学生类型
何谓“数据类型”?
在用高级程序语言编写的程序中,必
非数值计算的程序设计问题
例一 求一组(n个)整数中的最大值 例二 交叉路口的交通管制问题 例三 煤气管道的铺设问题 例四 数据库中表格管理问题
概括地说,
数据结构是一门讨论“描述现
实世界实体的数学模型(非数值计 算)及其上的操作在计算机中如何
表示和实现”的学科。
一、基本概念和术语 二、数据结构 三、数据类型和抽象数据类型
主讲:郑 玉
1.1 数据结构讨论的范畴 1.2 与数据结构相关的概念
1.3 算法和算法的量度
软件开发的过程:
系统分析
确定系统所要达到的目标
确定实现方案并生成系统
系统设计
系统实现 实地安装调试 系统维护 系统修整完善
Niklaus Wirth
Algorithm + Data Structures = Programs
基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉
赋值参数 只为操作提供输入值; 引用参数 以&打头,除可提供输入值外,
还将返回操作结果。
初始条件 描述操作执行之前的数据结构和参
特点: • 每个学生的信息占据一行,所有学生的信息按学 号顺序依次排列构成一张表格; • 表中每个学生的信息依据学号的大小存在着一 种前后关系,这就是我们所说的线性结构; • 对它的操作通常是插入某个学生的信息,删除某 个学生的信息,更新某个学生的信息,按条件检索 某个学生的信息等等。 • • 应用举例2——输出n个对象的全排列 • 输出n个对象的全排列可以使用下图1-1所示 的形式描述。
指针合成的结点”表示数据元素。
存储结构的描述方法随编程环境的不
同而不同,当用高级程序设计语言进行 编程时,通常可用高级编程语言中提供 的数据类型描述之。
例如,当以“顺序映象”表示长整数 时,可定义为:
typedef int Long_int [3]
定义“日期”为: typedef struct { int y; // 年号 Year int m; // 月号 Month int d; // 日号 Day } DateType; // 日期类型
和实现,故又称“存储结构” 。
存储结构是逻辑结构在存储器中的映象
“数据元素”的映象 ? “关系”的映象 ? 用二进制位(bit)的位串表示数据元素 (321)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2
“关系” 的两种映象方法:
(表示x, y的方法)
…… } ADT Complex
(8 6i)( 4 3i ) z (8 6i) (4 3i )
# include <iostream.h>
void main() { }
……
complex z1,z2,z3,z4,z; float RealPart,ImagPart;
InitComplex(z1,8.0,6.0);
----数据项是不可再分割的“原 子”
又如,描述一个学生的数据元素由 多个款项构成,其中每个款项称为一 个“数据项”。
它是数据结构中讨论的最小单位。 姓 名学 号班 号性别出生日期入学成绩 年月日 数据项 称之为组合项
关键字
能识别一个或几个数据元素的数据项。 若能起唯一识别作用,则被称为“主”
关键字,否则称为“次”关键字。