【数据结构】逻辑结构与物理结构

news2024/12/25 22:09:39

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022

 


根据视点的不同,我们把数据结构分为逻辑结构物理结构.

🌳逻辑结构

逻辑结构:是指数据对象中数据元素之间的相互关系.

逻辑结构分为以下四种:

1.集合结构

集合结构:集合结构中的数据元素除了同属于一个集合,它们之间没有其他关系.

也即,各个数据元素是"平等"的,它们的共同属性是"同属于一个集合".

集合结构图示
集合结构图示

集合结构画风如下:


2.线性结构

线性结构:线性结构中的数据元素之间存在一个对一个的关系.

线性结构图示

线性结构画风如下:


 3.树形结构

树形结构:树形结构中的数据元素之间存在一种一对多的层次关系.

树形结构图示

树形结构画风如下:


4.图形结构或网状结构

图形结构:图形结构的数据元素是多对多的关系.

图形结构示意图

图形结构画风如下:


我们在用示意图表示数据结构时,要注意两点:

  • 将每一个数据元素看作一个结点,用圆圈表示.
  • 元素之间的逻辑关系用结点之间的连线表示,如果这个关系是有方向的,那么用带箭头的连线表示.

逻辑结构针对具体问题的,是为了解决某个问题,在对问题理解的基础上,选择一个合适的数据结构表示数据元素之间的逻辑关系.


🌳物理结构

物理结构:又称存储结构,是指数据的逻辑结构在计算机中的存储形式,它包含数据元素的表示和关系的表示.

数据是数据元素的集合,根据物理结构的定义,实际上就是如何把数据元素存储到计算机的存储器中.存储器主要是针对内存而言的,像硬盘,软盘,光盘等外部存储器的数据组织通常用文件结构来描述.

计算机存储器的分类

数据的存储结构正确反映数据元素之间的逻辑关系,这是最为关键的.

如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点.

数据元素的存储结构形式两种:顺序存储链式存储.

1.顺序存储结构

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的.

如:

可以看到,字符型变量a,b,c,d,e,f在内存中就是按顺序存储的.

顺序存储的特点就是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系.

再比如,我们假设可以使用2个字节的空间表示一个实数,则可以用地址相邻的4个字节的空间表示一个复数.

如下图为表示复数 z1=3.0-2.3i z2=-0.7+4.8i 的顺序存储结构:

复数顺序存储结构示意图

顺序结构其实非常简单,就是大家都按顺序排好,每个人站一小段空间.

我们之前学习C语言时,数组就是这样的顺序存储结构.


2.链式存储结构

虽然顺序存储结构非常简单有规律,但我们在前期学习C语言的时候一定遇到过这样的问题:

就是以删除数组元素为基础的题目,这时候因为数组是顺序结构,我们没法直接将找到的某个元素删除掉.

因为顺序结构的内存空间是固定的,我们只能采用将指定元素后面的所有元素向前移动一个位置的方法来实现"删除"某个元素的效果.

图示如下:

数组元素或者要删除的元素在数组中的位置较为靠后时,似乎只需要移动几个元素就可以达到我们想要的效果,

但是当数组元素非常删除元素在数组中的位置较为靠前的时候,这样的删除元素的效率非常低了.

因此,面对这样时常要变化的结构,顺序存储是不科学的.于是我们就引入了链式存储结构:

链式存储结构:是把元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的.

链式存储结构示意图

如图,因为数据元素的存储关系不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置.

链式存储结构的特点借助指示元素存储地址的指针(pointer)表示数据元素之间的逻辑关系.

显然,链式存储就灵活的多,数据存在哪里不重要,只要有一个指针存放了相应的地址就能找到它了.

我们再拿上面顺序结构中提到过的复数来举例:

如下图为表示复数 z1=3.0-2.3i 的链式存储结构,其中实部和虚部之间的关系用值为"0x12ff0415"的指针来表示(0x12ff0415是虚部的存储地址):


综上,逻辑结构是面向问题的,而物理结构就是面向计算机的,其基本的目标就是将数据及其逻辑关系存储到计算机的内存中.


结语:

本节我们一起学习了数据结构中的逻辑结构与物理结构,在数据结构绪论章中,我们还将一起探讨其他三节的内容,分别是:什么是数据结构,数据结构的基本概念和术语以及抽象数据类型,有兴趣的朋友可以直接点击下方链接跳转至相应博客:

                                                                相关文章推荐

                                                   【数据结构】什么是数据结构?

                                                   【数据结构】基本概念和术语



数据结构绪论篇思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机中实数的比较

计算机中实数的比较 最近被问到了实数与0为什么不能直接比较的问题,要想说清楚还真不容易。 这里从浮点数的表示、内存存储角度加以总结。 科学计数法 科学计数法表示十进制数的浮点数遵循了小数点前面只有一个数(1~9)的规则。 例如&…

python+nodejs+php+springboot+vue 法律知识分享科普系统平台

在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 要想实现法律知…

93 # 实现 express 错误处理中间件

上一节实现了 express 的中间件,这一节来实现错误处理中间件 执行某一步出错了,统一规定调用 next 传递的参数就是错误信息 先看 express 实现的demo const express require("express"); const app express();app.use("/", (re…

2023-09-23 Windows系统rust开发环境配置真经

Windows系统rust开发环境配置真经 前言一、配置C编译链和VsCode二、安装rust编译工具三、配置VsCode一. 安装rust-analyzer插件二. 安装Error Lens插件三. 安装Even Better TOML插件四. 配置 launch.json五. 配置 tasks.json六. 配置 Cargo.toml 总结 前言 有了配置C语言环境的…

腾讯mini项目-【指标监控服务重构】2023-08-27

今日已办 Docker Monitoring with cAdvisor, Prometheus and Grafana Docker Monitoring with cAdvisor, Prometheus and Grafana | by Mertcan Simsek | MediumMonitoring Docker container metrics using cAdvisor | Prometheus prometheus.yml global:scrape_interval: …

Linux下安装使用Redis

1.进入/usr/local目录,新建一个目录redis,下载redis安装包 wget https://download.redis.io/releases/redis-6.2.6.tar.gz**并解压 tar xzf redis-6.2.6.tar.gz进入redis-6.2.6目录 cd redis-6.2.6用make来编译 make2.启动redis: ./src/redis-server…

Vue-devTools安装—创建项目方法2 ui创建——Vue指令综合案例——汽车品牌管理

目录 项目源代码: 一、vue-devTools安装 二、案例功能实现 1、新建项目(ui创建) 2、cnpm导入项目依赖库 3、删除不需要的代码结构: 4、修改代码结构 5、添加汽车品牌 插件安装 bootstrap的提示功能 添加bootstrap样式 6、删除汽车品牌…

ndoe.js、npm相关笔记

1、npm 全局安装 npm config get prefix 获取 npm 全局安装路径如果全局插件不能正常使用,看环境变量是否已经配置。没有配置则把全局安装路径配置到环境变量的path中

【golang】调度系列之sysmon

调度系列 调度系列之goroutine 调度系列之m 调度系列之p 在golang的调度体系中,除了GMP本身,还有另外一个比较重要的角色sysmon。实际上,除了GMP和sysmon,runtime中还有一个全局的调度器对象。但该对象只是维护一些全局的数据&…

高云FPGA系列教程(10):letter-shell串口终端移植

文章目录 1. letter-shell简介2. letter-shell源码获取3. letter-shell移植4. 函数和变量应用示例本文是高云FPGA系列教程的第10篇文章。 shell,中文是外壳的意思,就是操作系统的外壳。通过shell命令可以操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总…

leetcode100----双指针

283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1:输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2:输入: nums …

英飞凌TC3xx--深度手撕HSM安全启动(六)--安全启动的TARA、HARA分析

在之前我们讲解基于Tricore的安全启动流程,但是是不是这种流程就是安全可靠的呢?不确定,因此对启动流程基于信息安全的TARA分析基和于功能安全的HARA分析必不可少。 1、安全启动的TARA分析 首先我们来看看什么叫做TARA分析。 在ISO\SAE 21434 中对于TARA描述为threat analy…

浅析工具dirpro v1.2源码

文章目录 前言源码分析dirpro.pystart.pybackup.pyrely.pyresults.pyend.py 前言 工具简介 dirpro 是一款由 python 编写的目录扫描器专业版,操作简单,功能强大,高度自动化 自动根据返回状态码和返回长度,对扫描结果进行二次整理…

【动手学深度学习-Pytorch版】注意力汇聚:Nadaraya-Watson 核回归

注意力机制中的查询、键、值 在注意力机制的框架中包含了键、值与查询三个主要的部分,其中键与查询构成了注意力汇聚(有的也叫作注意力池化)。 键是指一些非意识的线索,例如在序列到序列的学习中,特别是机器翻译&…

基于Python+Django的热门旅游景点数据分析系统的设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

JAVA:实现Excel和PDF上下标

1、简介 最近项目需要实现26个小写字母的上下标功能,自己去网上找了所有Unicode的上下标形式,缺少一些关键字母,顾后面考虑自己创建上下标字体样式,以此来记录。 2、Excel Excel本身是支持上下标,我们可以通过Excel单元格的样式来设置当前字体上下标,因使用的是POI的m…

YOLOv5:修改backbone为ACMIX

YOLOv5:修改backbone为ACMIX 前言前提条件相关介绍ACMIXYOLOv5修改backbone为ACMIX修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作,方便自己查阅。由于本人水平有限,难免出现错漏,敬请批评…

【软件设计师-从小白到大牛】上午题基础篇:第四章 法律法规与知识产权

文章目录 前言章节提要一、保护期限真题链接 二、知识产权人确定真题链接 三、侵权判定真题链接 四、标准化基础知识 前言 ​ 本系列文章为观看b站视频以及b站up主zst_2001系列视频所做的笔记,感谢相关博主的分享。如有侵权,立即删除。 视频链接&#xf…

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例

Qt5开发及实例V2.0-第二十三章-Qt-多功能文档查看器实例 第23章 多功能文档查看器实例23.1. 简介23.2. 界面与程序框架设计23.2.1. 图片资源23.2.2. 网页资源23.2.3. 测试用文件 23.3 主程序代码框架23.4 浏览网页功能实现23.4.1 实现HtmIHandler处理器 23.5. 部分代码实现23.5…

git 本地分支基础操作

(1)建立分支 a:基于某个commit建立分支 然后切换 git branch test_branch 6435675ad32c035ed4d9cb6c351de5cbaecddd99 git checkout test_branchb: git checkout 建立分支然后切换 git checkout -b checkout_branchc:分支建立 然后切换 git branch …