快捷搜索: 王者荣耀 脱发

聊一聊数据的逻辑结构和物理结构

我们已经知道,数据的存储形式大致可以分为线性结构,树形结构,图结构和散列结构。通常我们选择一个高效低耗的存储结构主要取决于数据存储的逻辑结构和物理结构。


逻辑结构

简单来说,数据的逻辑结构就是数据间的逻辑关系,而与他们在计算机中的存储位置无关。而按照数据间的关系,我们可以将逻辑结构分为线性结构和非线性结构。

    线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。例如:线性表,典型的线性表有:顺序表、链表、栈(顺序栈、链栈)和队列(顺序队列、链队列)。它们共同的特点就是数据之间的线性关系,除了头结点和尾结点之外,每个结点都有唯一的前驱和唯一的后继,也就是所谓的一对一的关系。 非线性结构:对应于线性结构,非线性结构也就是每个结点可以有不止一个直接前驱和直接后继。常见的非线性结构包括:树(元素之间是一对多的关系)、图或网(元素之间是多对多的关系)等。

家族关系图

如上图所示的家族关系图,我们可以看出大颜有两个子女,分别是小红和小白,他们是兄妹关系,小黑又是小白的子女,小蓝是小红的子女,而小黑和小蓝是表兄妹关系。以上所示的兄妹,子女,表兄妹等就是数据间的逻辑关系,我们存储的时候不仅要将数据信息存储,也要将他们之间的关系存储,缺一不可。只有这样,当我们将数据进行恢复,也能恢复他们之间的逻辑关系。

由此,我们可以通过分析数据之间的逻辑关系来决定使用哪种存储结构,但具体使用顺序存储还是链式存储,还要通过数据的物理结构来决定。


物理结构

逻辑结构存储对象之间的关系,而物理结构指数据的逻辑结构在计算机存储空间的存放形式。通俗的讲,物理结构指的是数据在物理存储空间上选择集中存放还是分散存放,这很好理解。常见的存储结构有顺序存储、链式存储、索引存储以及散列存储(哈希表)。

    顺序存储:把逻辑上相邻的节点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。由此得到的存储结构为顺序存储结构,通常顺序存储结构是借助于数组来描述的。优点:节省空间,可以实现随机存取;缺点:插入、删除时需要移动元素,效率低。 链式存储:在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。特点是元素在物理上可以不相邻,所以每个数据元素包括了一个数据域和一个指针域,数据域用来存放数据,而指针域用来指向其后继结点的位置。优点:插入、删除灵活;缺点:不能随机存取,查找速度慢。

由于数据的用途不同,选择的物理结构也不同。将数据进行集中存储有利于后期对数据进行遍历操作,而分散存储更有利于后期增加或删除数据。因此,如果后期需要对数据进行大量的检索(遍历),就选择集中存储;反之,若后期需要对数据做进一步更新(增加或删除),则选择分散存储。


逻辑结构和存储结构的关系

这两者并不冲突,数据的逻辑结构是从逻辑关系角度观察数据,它与数据的存储无关,是独立于计算机的。而数据的存储结构是逻辑结构在计算机内存中的实现,它是计算机处理的逻辑。


经验分享 程序员 微信小程序 职场和发展