数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。
元素之间的关系在计算机中有两种不同的表示方法:顺序表示和非顺序表示。由此得出两种不同的存储结构:顺序存储结构和链式存储结构。
顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针(pointer ),用该指针来表示数据元素之间的逻辑结构(关系)。
例:设有数据集合A={3.0,2.3,5.0,-8.5,11.0} ,两种不同的存储结构。
顺序结构:数据元素存放的地址是连续的;
链式结构:数据元素存放的地址是否连续没有要求。
数据的逻辑结构和物理结构是密不可分的两个方面,一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
在C语言中,用一维数组表示顺序存储结构;用结构体类型表示链式存储结构。
数据结构的三个组成部分:
逻辑结构: 数据元素之间逻辑关系的描述
D_S=(D,S)
存储结构: 数据元素在计算机中的存储及其逻辑关系的表现称为数据的存储结构或物理结构。
数据操作: 对数据要进行的运算。
数据类型(Data Type):指的是一个值的集合和定义在该值集上的一组操作的总称。
数据类型是和数据结构密切相关的一个概念。 在C语言中数据类型有:基本类型和构造类型。
数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。
抽象数据类型(Abstract Data Type ,简称ADT):是指一个数学模型以及定义在该模型上的一组操作。
ADT的定义仅是一组逻辑特性描述, 与其在计算机内的表示和实现无关。因此,不论ADT的内部结构如何变化,只要其数学特性不变,都不影响其外部使用。
ADT的形式化定义是三元组:ADT=(D,S,P)
其中:D是数据对象,S是D上的关系集,P是对D的基本操作集。
ADT的一般定义形式是:
ADT <抽象数据类型名>{
数据对象: <数据对象的定义>
数据关系: <数据关系的定义>
基本操作: <基本操作的定义>
} ADT <抽象数据类型名>
其中数据对象和数据关系的定义用伪码描述。
基本操作的定义是:
<基本操作名>(<参数表>)
初始条件: <初始条件描述>
操作结果: <操作结果描述>
初始条件:描述操作执行之前数据结构和参数应满足的条件;若不满足,则操作失败,返回相应的出错信息。
操作结果:描述操作正常完成之后,数据结构的变化状况和 应返回的结果。