IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法的区别与联系 -> 正文阅读

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

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

目录

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

数据的物理结构?

数据的逻辑结构

?总结

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


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

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

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

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

数据的逻辑结构

数据的物理结构?

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

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 值就是最终结果。

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:43:26  更:2022-09-13 11:44:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:49:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码