数据结构与算法的区别与联系

数据的物理结构与逻辑结构

目录

数据的物理结构与逻辑结构

数据的物理结构 

数据的逻辑结构

 总结

数据结构与算法的区别与联系


数据结构教我们有效地存储数据,既要存储数据本身,还要存储数据之间的关系。

存储数据本身,也就是将数据存储到内存里。数据在内存中的存储状态,就称为数据的存储结构,也叫物理结构

数据结构中,将数据之间的关系称为数据的逻辑结构

以下图所示的家谱图为例,数据之间存在很多关系,比如张亮是张平的父辈、是张静的祖辈等,所有这些关系就构成了数据的逻辑结构。

数据的逻辑结构

数据的物理结构 

在内存中,数据的存储结构无非有以下两种情况:

1) 集中存储:所有数据存储在一整块内存空间中,数据之间紧挨着存放(顺序存储结构--顺序表)

2) 分散存储:各个数据随机存储在内存空间中(链式存储结构--链表)

两种存储结构各有优势,将数据集中存储,方便后续查找数据;将数据分散存储,方便后续增加或者删除数据。

数据的逻辑结构

1) 无关系:所谓“无关系”,即数据之间不存在任何关系。例如下图中,{1,2,3,4} 中各个数据之间就没有任何关系。

无关系的逻辑结构

 2) 一对一:下图的数据集中,每个数据的左侧有且仅有一个数据与其相邻(除 1 外);同样,每个数据的右侧也只有一个数据与其相邻(除 n 外),所有的数据都是如此,数据之间就是“一对一”的逻辑结构。

一对一的逻辑结构

3) 一对多

如“家谱图”中,数据之间就是“一对多”的逻辑结构。

以“张平”为例,他的父辈是“张亮”;他有两个孩子,分别是“张晶”和“张磊”。“张平”和其它数据之间就是“一对多”的关系,整个数据集呈现“一对多”的逻辑结构。

4) 多对多:下图{V1,V2,V3,V4} 数据之间就具有“多对多”的逻辑结构。

多对多的逻辑结构

 多对多关系和一对多关系的区别在于:一对多关系中不存在环路,而多对多关系中存在环路,比如V1->V3->V2->V1就是一个环路。

针对每一种逻辑结构的数据,数据结构都提供了存储它们的方案:

  • 查找表存储结构:专门存储无逻辑结构的数据;
  • 线性存储结构:专门存储具有“一对一”逻辑结构的数据;
  • 树存储结构:专门存储具有“一对多”逻辑结构的数据;
  • 图存储结构:专门用来存储具有“多对多”关系的数据;

 总结

关于数据结构,与其说它是一门研究存储数据以及数据之间关系的学科,还可以这样概括:它是一门研究数据存储结构和逻辑结构的学科。通过研究数据的物理结构,可以掌握存储数据的方法;通过研究数据的逻辑结构,可以掌握存储数据之间关系的方法。

数据的存储结构有 2 种,分别是集中存储和分散存储。如果想集中存储数据,就选择顺序存储结构;如果想分散存储数据,就择链式存储结构。

数据的逻辑结构有 4 种,分别是“无关系”、“一对一”、“一对多”和“多对多”。无逻辑关系的数据可以选用查找表存储结构;具有“一对一”关系的数据可以选用线性存储结构;具有“一对多”关系的数据可以选用树存储结构;具有“多对多”关系的数据可以选用图存储结构

实际场景中,确定了数据的存储结构和逻辑结构,就可以敲定数据的存储方案。比如,数据呈现“一对多”关系,想分散存储,那么就选用【树的链式存储结构f】。

逻辑结构和存储结构(物理结构)详解 (biancheng.net)

数据结构与算法的区别与联系

数据结构和算法之间完全是两个相互独立的学科,如果非说它们有关系,那也只是互利共赢、“1+1>2”的关系。

我们还可以从分析问题的角度去理清数据结构和算法之间的关系。通常,每个问题的解决都经过以下两个步骤:

  1. 分析问题,从问题中提取出有价值的数据,将其存储;
  2. 对存储的数据进行处理,最终得出问题的答案;

数据结构负责解决第一个问题,即数据的存储问题。通过前面的学习我们知道,针对数据不同的逻辑结构和物理结构,可以选出最优的数据存储结构来存储数据。
而剩下的第二个问题,属于算法的职责范围。算法,从表面意思来理解,即解决问题的方法。我们知道,评价一个算法的好坏,取决于在解决相同问题的前提下,哪种算法的效率最高,而这里的效率指的就是处理数据、分析数据的能力。

因此我们得出这样的结论,数据结构用于解决数据存储问题,而算法用于处理和分析数据,它们是完全不同的两类学科。

也正因为如此,你可以认为数据结构和算法存在“互利共赢、1+1>2”的关系。在解决问题的过程中,数据结构要配合算法选择最优的存储结构来存储数据,而算法也要结合数据存储的特点,用最优的策略来分析并处理数据,由此可以最高效地解决问题。

例如,有这样一个问题,计算“1+2+3+4+5”的值。这个问题我们可以这样来分析:

  • 计算 1、2、3、4 和 5 的和,首先要选择一种数据存储方式将它们存储起来,通过前面的学习我们知道,数据之间具有“一对一”的逻辑关系,最适合用线性表来存储。结合算法的实现,我们选择顺序表来存储数据(而不是链表)。
  • 接下来,我们选择算法。由于数据集中存放,因此我们可以设计这样一个算法,使用一个初始值为 0 的变量 num 依次同存储的数据做“加”运算,最后得到的新 num 值就是最终结果。

选择顺序表而不是链表的原因,是顺序表遍历数据比链表更高效。后续讲顺序表时会做详细介绍。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值