1,计算机解决客观世界中问题过程:
首先通过对客观世界的认知形成印象和概念从而得到了信息,
在此基础上建立概念模型,
它必须能够如实地反映客观世界中的事物以及事物间的联系;
根据概念模型将实际问题转化为计算机能够理解的形式,然后设计程序;
用户通过人机交互界面与系统交流,
使系统执行相应操作,最后解决实际的问题。
数据结构主要从建立概念模型到实现模型转化并为后续程序设计提供基础的内容相关。
它是用来反映一个概念模型的内部构成,
即一个概念模型由那些成分数据构成,以什么方式构成,呈现什么结构。
数据结构主要是研究程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。
2,基本概念:
数据(data)
是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。
数据的含义非常广泛,
除了通常的数值数据、字符、字符串是数据以外,
声音、图像等一切可以输入计算机并能被处理的都是数据。
例如除了表示人的姓名、身高、体重等的字符、数字是数据,人的照片、指纹、三维模型、语音指令等也都是数据。
数据元素(data element )
是数据的基本单位,是数据集合的个体,
在计算机程序中通常作为一个整体来进行处理。
例如一条描述一位学生的完整信息的数据记录就是一个数据元素;
空间中一点的三维坐标也可以是一个数据元素。
数据元素通常由若干个数据项组成,
例如描述学生相关信息的姓名、性别、学号等都是数据项;
三维坐标中的每一维坐标值也是数据项。
数据项具有原子性,是不可分割的最小单位。
数据对象(data object ) 是性质相同的数据元素的集合,是数据的子集。 例如一个学校的所有学生的集合就是数据对象,空间中所有点的集合也是数据对象。
数据结构(data structure )
是指相互之间存在一种或多种特定关系的数据元素的集合。
是组织并存储数据以便能够有效使用的一种专门格式,
它用来反映一个数据的内部构成,
即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。
3,数据结构有两种不同的表现形式:
由于信息可以存在于逻辑思维领域,也可以存在于计算机世界,
因此作为信息载体的数据同样存在于两个世界中。
表示一组数据元素及其相互关系的数据结构同样也有两种不同的表现形式,
一种是数据结构的逻辑层面,即数据的 逻辑结构;
一种是存在于计算机世界的物理层面,即数据的 存储结构。
4,数据的逻辑结构按照数据元素之间相互关系的特性来分
可以分为以下四种结构: 集合、线性结构、树形结构和 图状结构。
以下讨论的数据结构主要有线性表、栈、队列、树和图,
其中线性表、栈、队列属于线性结构,树和图属于非线性结构。
4.1,数据的逻辑结构可以采用两种方法来描述: 二元组、图形。
数据结构的二元组表示形式为: 数据结构 = {D , S} 其中 D 是数据元素的集合; S 是 D 中数据元素之间的关系集合, 并且数据元素之间的关系是使用序偶来表示的。 序偶是由两个元素 x 和 y 按一定顺序排列而成的二元组, 记作<x , y>,x 是它的第一元素,y 是它的第二元素。 当使用图形来表示数据结构时, 是用图形中的点来表示数据元素, 用图形中的弧来表示数据元素之间的关系。 如果数据元素 x 与 y 之间有关系<x , y>, 则在图形中有从表示 x 的点出发到达表示 y 的点的一条弧。
4.1.1,二元组表示集合:
set = (K,R),其中 K = {01, 02, 03, 04, 05} R = {} 可以看到在数据结构 set 中, 只有数据元素的集合非空, 而数据元素之间除了同属一个集合之外不存在任何关系(关系集合为空)。 这表明该结构只考虑数据元素而不考虑它们之间的关系。 我们把具有这种特点的数据结构称为集合结构。
4.1.2,图形表示集合:
4.2.1二元组表示线性结构:
linearity = (K,R),其中 K = {01, 02, 03, 04, 05} R = {<02,04>, <03,05>, <05,02>, <01,03>} 可以看到在数据结构 linearity 中,数据元素之间是有序的。 在这些数据元素中有一个可以被称为“第一个”(元素 01)的数据元素; 还有一个可以被称为“最后一个”(元素 04)的数据元素; 除第一个元素以外每个数据元素有且仅有一个直接前驱元素, 除最后一个元素以外每个数据元素有且仅有一个直接后续元素。 这种数据结构的特点是数据元素之间是 1对 1 的联系, 即线性关系,我们把具有此种特点的数据结构称为 线性结构。
4.2.2,图形表示线性结构:
4.3.1, 二元组表示树:
tree = (K,R),其中 K = {01, 02, 03, 04, 05, 06} R = {<01,02>, <01,03>, <02,04>, <02,05>, <03,06>} 可以看到在数据结构 tree 中, 除了一个数据元素(元素 01)以外每个数据元素有且仅有一个直接前驱元素, 但是可以有多个直接后续元素。 这种数据结构的特点是数据元素之间是 1 对 N 的联系, 我们把具有此种特点的数据结构称为 树结构。
4.3.2,图形表示树结构:
4.4.1,二元组表示图结构:
二元组表示为 graph = (K,R),其中 K = {01, 02, 03, 04, 05} R = {<01,02>, <01,05>, <02,01>, <02,03>, <02,04>, <03,02>, <04,02>, <04,05>, <05,01>, <05,04>} 可以看到在数据结构 graph 中, 每个数据元素可以有多个直接前驱元素, 也可以有多个直接后续元素。 这种数据结构的特点是数据元素之间是 M 对 N 的联系, 我们把具有此种特点的数据结构称为 图结构。
4.4.2,图表示图结构:
5, 数据的存储结构
主要包括数据元素本身的存储以及数据元素之间关系表示:
数据元素本身存储可以很容易的使用 Java 中的一个类来实现它,
数据元素的数据项就是类的成员变量。
数据元素之间的关系在计算机中主要有两种不同的表示方法:
顺序映像和 非顺序映像
并由此得到两种不同的存储结构:
顺序存储结构和链式存储结构。
顺序存储结构的特点是:
数据元素的存储对应于一块连续的存储空间,
数据元素之间的前驱和后续关系通过数据元素在存储器中的相对位置来反映。
链式存储结构的特点是:
数据元素的存储对应的是不连续的存储空间,
每个存储节点对应一个需要存储的数据元素。
元素之间的逻辑关系通过存储节点之间的链接关系反映出来。
在 Java 这种计算机高级程序设计语言的基础上来讨论数据结构,
因此,讨论数据的存储结构时不会在真正的物理地址的基础上去讨论顺序存储和链式存储,
而是在 Java 语言提供的 一维数组以及 对象的引用的基础上去讨论和实现数据的存储结构