数据的存储方式可分为线性表、树和图三种存储结构,而每种存储结构又可细分为顺序存储结构和链式存储结构。数据存储方式如此之多,针对不同类型的数据选择合适的存储方式是至关重要的。
数据存储结构的选择取决于两方面,即数据的逻辑结构和存储结构(又称物理结构)。
逻辑结构简单地理解,就是指的数据之间的逻辑关系。 如上图所示:这是一张家庭成员关系图,从图中可以看到,张平、张华和张群是兄弟,他们的父亲是张亮,其中张平有两个儿子,分别是张晶和张磊。以上所说,父子、兄弟等这些关系都指的是数据间的逻辑关系,又称逻辑结构。
一组数据成功存储到计算机的衡量标准是要能将其完整的复原,如果所存储的数据能将此成员关系图彻底复原,则说明数据存储成功。
数据之间的逻辑关系可细分为三类:
- 一对一(一个老师讲解一个课程)
- 一对多(一个老师管理多个学生)
- 多对多(多个学生完成多科作业)
类似集合 {1,2,3,…,n} 这类的数据,每个数据的左侧有且仅有一个数据与其相邻(除1外),同样,每个数据的右侧也只有一个数据与其相邻(除 n 外),所有的数据都是如此,就说数据之间是“一对一”的逻辑关系。
通过学习数据结构,我们可以学到 3 种存储结构分别存储这 3 类逻辑关系的数据,换句话说:
- 线性表用于存储具有“一对一”逻辑关系的数据
- 树结构用于存储具有“一对多”关系的数据
- 图结构用于存储具有“多对多”关系的数据
由此,我们可以通过分析数据之间的逻辑关系来决定使用哪种存储结构,但具体使用顺序存储还是链式存储,还要通过数据的物 理结构来决定。
物理结构数据的存储结构,也就是物理结构,指的是数据在物理存储空间上选择集中存放还是分散存放。
例如:假设要存储大小为 10G 的数据,则集中存放就如图 3a) 所示,分散存放就如图 3b)所示。 如果选择集中存储,就使用顺序存储结构。反之,就使用链式存储。
至于如何选择,主要取决于存储设备的状态以及数据的用途。
我们知道,集中存储(底层实现使用的是数组)需要使用一大块连续的物理空间,假设要存储大小为 1G 的数据,若存储设备 上没有整块大小超过 1G 的空间,就无法使用顺序存储,此时就要选择链式存储,因为链式存储是随机存储数据,占用的都是 存储设备中比较小的存储空间,因此有一定几率可以存储成功。
并且,数据的用途不同,选择的存储结构也不同。将数据进行集中存储有利于后期对数据进行遍历操作,而分散存储更有利于后 期增加或删除数据。因此,如果后期需要对数据进行大量的检索(遍历),就选择集中存储;反之,若后期需要对数据做进一步 更新(增加或删除),则选择分散存储。