一、一些基本概念和术语
1.数据
数据是用来描述现实世界的数字、字符、图像、声音以及能够输入到计算机中,并能被计算机处理的符号集合。
2.数据元素
数据元素是数据的基本单位,是数据这个集合中的个体。也称元素、结点、顶点、记录。在计算机中通常作为一个整体进行考虑和处理。
一个数据元素可以由若干个数据项组成。
3.数据项
数据项是数据不可分割的“最小单位”,也称域(field)。
4.数据对象
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。 在实际应用中处理的数据元素通常具有相同性质,例如,学生选课系统中每个数据元素具有相同数目和类型的数据项,所有数据元素(课程)的集合就构成了一个数据对象。
5.数据结构
数据结构(Data Structure)是指相互之间存在一种或多种特定的关系的数据元素的集合。数据元素之间的关系称为结构(Structure)。根据数据元素之间关系的不同特性,通常有以下4类基本结构:
(1)集合:数据元素之间就是“属于同一个集合”,除此之外没有任何关系。
(2)线性结构:数据元素之间存在着一对一的线性关系。
(3)树形结构:数据元素之间存在着一对多的层次关系。
(4)图状结构或网状结构:数据元素之间存在着多对多的任意关系。
数据结构包括三方面的内容:逻辑结构、存储结构、运算。
6.数据的逻辑结构
数据的逻辑结构是指数据元素之间逻辑关系的整体,常简称为数据结构。
(1)逻辑结构的分类
集合:数据元素间除“同属于一个集合”外,无其它关系
线性结构:结构中的数据元素之间存在“一对一”的关系。若结构为非空集,则除了第一个元素,其它每个元素都只有一个直接前驱,除了最后一个元素,其它每个元素都只有一个直接后继。对它的运算通常是插入、删除、更新、按条件检索某个信息等等。
树型结构:结构中的数据元素之间存在“一对多”的关系。若结构为非空集,则除了第一个数据元素以外,其它每个数据元素都只有一个直接前驱,以及零个或多个直接后继。对它的操作有:建立树形结构,输出最低层结点内容等等。
图状结构:结点间关系:多对多结构中的数据元素之间存在“多对多”的关系。若结构为非空集,则每个数据元素可有多个(零个)直接前驱和多个(零个)直接后继。对它的操作有:建立图状结构,输出路径等等。
(2)逻辑结构的表示方法
方法1——逻辑结构二元组
一个二元组表示为:B=(D,R)
其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R所组成。 D={ di | 0≤i≤n-1,n≥0}:数据元素的集合;R={ rj | 0≤j≤m,m≥0}:关系的集合
每个关系的用若干个序偶来表示:
<x,y>,称x是y的前驱,y是x的后继
序偶<x,y>表示x、y是有向的,序偶(x,y)表示x、y是无向的
【例】S1=(D,R1),S2=(D,R2),S3=(D,R3)
D={a,b,c,d,e}
R1={<a,b>,<b,c>,<c,d>,<d,e>}
R2={<a,b>,<a,c>,<b,d>,<b,e>}
R3={<a,b>,<a,c>,<d,a>,<e,c>}
方法2——逻辑结构示意图
以上面的例子,就可以制作出与之匹配的逻辑结构示意图,如下图所示
7、数据的存储结构
数据的逻辑结构在计算机中的表示(又称为映像),称此为物理结构,或称存储结构。
4种基本的存储结构
(1)顺序结构
顺序存储结构是采用一组连续的存储单元存放所有的数据元素,而且逻辑上相邻的元素的存储单元也相邻。也就是说,元素之间的逻辑关系由存储单元地址间的关系隐含表示,即顺序存储结构将数据的逻辑结构直接映射到存储结构。
顺序存储结构的特点:
1.所有元素占用一整块内存空间。
2.逻辑上相邻的元素,物理上也相邻。
(2)链式存储结构
链式存储是用一组任意的存储单元存储数据元素,不要求其物理位置相邻,数据元素之间的逻辑关系通过附设的指针字段来表示。
链式存储结构的特点:
1.借助指示元素存储地址的指针表示数据元素间的逻辑关系。
2.通常借助于程序设计语言中的指针或者引用类型来实现。
8.数据运算
数据运算是对数据的操作,常用的数据运算有如下的五个。
9.小结
二、抽象数据类型的表示与实现
数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总。
抽象数据类型(ADT: Abstract Data Types):指的是从求解问题的数学模型中抽象出来的数据逻辑结构和运算(抽象运算),而不考虑计算机的具体实现。
抽象数据类型 = 逻辑结构 + 抽象运算
更高层次的数据抽象。
由用户定义,用以表示应用问题的数据模型。
由基本的数据类型组成, 并包括一组相关的操作。
抽象数据类型可以用三元组来表示:ADT = (D,S,P)
ADT抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作 :<基本操作的定义>
}ADT抽象数据类型名
三、算法与算法分析
只需要分析时间复杂度即可