定义:
按照某种逻辑关系组织起来的一批数据,用一定的存储方式存储在计算机的存储器中,并在这些数据上定义一个运算的集合,就成为一个数据结构。
数据结构研究的内容如下:
(1)数据的逻辑结构:按照某种逻辑关系将数据组织好,即逻辑结构。
(2)数据的存储结构:将数据及数据之间的关系存储到存储区域中,即存储结构。
(3)数据的运算:在这些数据上定义一个基本运算的集合。
一、数据的逻辑结构
数据的逻辑结构是数据元素之间的逻辑关系。它是根据实际问题本身所含数据之间的内在联系而抽象出来的数学模型,与计算机无关,所以被称为数据的逻辑结构。
由于数据的逻辑结构是数学模型,所以可以借助数学方法来表示,我们可以用离散数学中关系代数的二元组表示:
Data_Structure = (D,S)
D = { d1,d2,...,dn },di(1<=i<=n)代表数据元素
S = { r1,r2,...,rm }, rj(1<=j<=m)代表数据元素之间的关系。
其中: Data_Structure代表数据结构的类型,D代表数据的集合,S代表关系的合集。S里的元素我们用<dm, dn>表示,其表示的含义是dm指向dn,所以,这两个数据的顺序不能颠倒。
以下图为例:
我们就可以这样表示:
L = (D, S)
D = {d1, d2, d3, d4,d5}
S = {<d1, d2>, <d2, d3>, <d3, d4>, <d4, d5>}
针对二元数组表示的逻辑结构,有如下的常用术语:
(1)前驱结点、后继结点、相邻结点。
放到上面的这个例子当中就是:d1是d2的前驱结点、d3是d2的后继结点……d1无前驱结点,d5无后继结点。
(2)开始结点、终端结点、内部结点
以上图为例,d1是开始结点;d5是后继结点;d2,d3,d4是内部节点。
二、数据结构的分类
数据结构分为两大类:线性结构 和 非线性结构。
线性结构:经典的线性结构是线性表。
非线性结构:经典的非线性结构是树形结构和图形结构。
三、数据的存储结构
数据的存储结构是指数据的逻辑结构到计算机存储区域的映射。对于数据的逻辑结构Data_Structure(D, S),在映射中,一方面要将数据集D中的数据元素存放到存储区域中,另一方面还要体现关系S。
完成数据的逻辑结构到存储区域的映射可以有很多种方法,常用的数据存储的方法有如下四种:
(1)顺序存储:把逻辑上相邻的数据元素存储在物理位置上相邻的存储单元里,例如:数组。
(2)链接存储:通过附加指针域来表示数据元素之间的关系。
(3)索引存储:通过附加索引表来表示数据元素之间的关系。索引表中的每一项称为索引项,用来标识一个或一组数据的存储位置。索引存储大致分为两种:
稠密索引:每个数据元素对应一个索引项。
稀疏索引:一组数据元素对应一个索引项。
(4)散列存储:基本思想是,根据数据元素的关键字直接计算出该数据元素的存储地址,通常成为关键字-地址转换法。这种方法需要设计一个散列函数,以关键字为自变量,散列函数值即为地址。用这种存储方法设计的存储结构最适合按照关键字进行查找,但数据元素之间的关系已经无法再存储结构上体现。
三、数据的运算
数据的运算(也称操作)是指对数据元素进行加工处理。数据的基本运算包括查找、插入、删除、排序等。
注意:在讨论任何一种数据结构时,都应该将数据的逻辑结构、数据的存储结构和数据的运算这三方面看成一个整体,不要孤立地理解一个方面,而要注意它们之间的联系。三个方面中的任意一方面不同,都可以被定义成不同的数据结构。