数据结构之----逻辑结构、物理结构

news2024/10/5 14:20:21

数据结构之----逻辑结构、物理结构

目前我们常见的数据结构分别有:
数组、链表、栈、队列、哈希表、树、堆、图
而它们可以从 逻辑结构和物理结构两个维度进行分类。

什么是逻辑结构?

逻辑结构是指数据元素之间的逻辑关系,而逻辑结构又分为线性结构和非线性结构两大类。

什么是线性结构?

线性结构比较直观,指数据在逻辑关系上呈线性排列
如:
在数组和链表中,数据按照顺序依次排列,体现了数据之间的线性关系。

什么是非线性结构?

非线性结构则与线性结构相反,指数据在逻辑关系上呈非线性排列
如:
在图中,数据由节点和边构成,反映了复杂的网络关系。
而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系。

在这里插入图片描述

而非线性数据结构又可以进一步被划分为树形结构和网状结构。

  • 线性结构:数组、链表、队列、栈、哈希表。元素之间是一对一的顺序关系。
  • 树形结构:树、堆、哈希表。元素之间是一对多的关系。
  • 网状结构:图。元素之间是多对多的关系。

什么是物理结构?

物理结构指的是数据在计算机内存中的存储方式,可分为连续空间存储(数组)和分散空间存储(链表)。
它从底层决定了数据的访问、更新、增删等操作方法,同时在时间效率和空间效率方面呈现出互补的特点。
在这里插入图片描述

我们都知道所有数据结构都是基于数组、链表或二者的组合实现的
如:
栈和队列既可以使用数组实现,也可以使用链表实现。
而哈希表的实现可能同时包含数组和链表。

  • 基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度 ≥ 3 的数组)等。
  • 基于链表可实现:栈、队列、哈希表、树、堆、图等。

基于数组实现的数据结构也被称为静态数据结构,这意味着此类数据结构在初始化后长度不可变
相对应地,基于链表实现的数据结构被称为动态数据结构,这类数据结构在初始化后,仍可以在程序运行过程中对其长度进行调整

Q&A

为什么哈希表同时包含线性数据结构和非线性数据结构?

哈希表底层是数组,而为了解决哈希冲突,我们会使用链式地址:数组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。
从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或树。因此,哈希表可能同时包含线性(数组、链表)和非线性(树)数据结构。

基于数组实现的数据结构也被称为“静态数据结构”是否有歧义?因为栈也可以进行出栈和入栈等操作,这些操作都是“动态”的。

栈确实可以实现动态的数据操作,但数据结构仍然是“静态”(长度不可变)的。尽管基于数组的数据结构可以动态地添加或删除元素,但它们的容量是固定的。如果数据量超出了预分配的大小,就需要创建一个新的更大的数组,并将老数组的内容复制到新数组中

在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢?

在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作是由类内部自动完成的。例如,Java 的 ArrayList 的初始容量通常为 10 。另外,扩容操作也是自动实现的

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

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

相关文章

有趣的数学 数学建模入门三 数学建模入门示例两例 利用微积分求解

一、入门示例1 1、问题描述 某宾馆有150间客房,经过一段时间的经营,该宾馆经理得到一些数据:如果每间客房定价为200元,入住率为55%;定价为180元,入住率为65%;定价为160元…

PyTorch张量:内存布局

你可能对 torch 上的某些函数感到困惑,它们执行相同的操作但名称不同。 例如: reshape()、view()、permute()、transpose() 等。 这些函数的做法真的不同吗? 不! 但为了理解它,我们首先需要了解一下张量在 pytorch 中…

AR-LDM原理及代码分析

AR-LDM原理AR-LDM代码分析pytorch_lightning(pl)的hook流程main.py 具体分析TrainSampleLightningDatasetARLDM blip mm encoder AR-LDM原理 左边是模仿了自回归地从1, 2, ..., j-1来构造 j 时刻的 frame 的过程。 在普通Stable Diffusion的基础上,使用了1, 2, .…

人工智能|深度学习——知识蒸馏

一、引言 1.1 深度学习的优点 特征学习代替特征工程:深度学习通过从数据中自己学习出有效的特征表示,代替以往机器学习中繁琐的人工特征工程过程,举例来说,对于图片的猫狗识别问题,机器学习需要人工的设计、提取出猫的…

产品<Axure的安装以及组件介绍

Axure介绍: Axure是一款用户体验设计工具,可以用于创建交互式原型、线框图和设计文档。它支持快速原型开发、界面设计、信息架构、流程图和注释等功能,可以帮助设计师快速地创建和共享交互式原型,从而更好地与客户和团队协作。 …

从 MQTT、InfluxDB 将数据无缝接入 TDengine,接入功能与 Logstash 类似

利用 TDengine Enterprise 和 TDengine Cloud 的数据接入功能,我们现在能够将 MQTT、InfluxDB 中的数据通过规则无缝转换至 TDengine 中,在降低成本的同时,也为用户的数据转换工作提供了极大的便捷性。由于该功能在实现及使用上与 Logstash 类…

「差生文具多系列」推荐两个好看的 Redis 客户端

📢 声明: 🍄 大家好,我是风筝 🌍 作者主页:【古时的风筝CSDN主页】。 ⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。 直达博主:「…

总结6种@Transactional注解的失效场景

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 引言 昨天有粉丝咨询了…

【漏洞修复】Cisco IOS XE软件Web UI权限提升漏洞及修复方法

关于Cisco IOS XE软件Web UI权限提升漏洞及修复方法 文章目录 漏洞基本信息漏洞影响范围确认设备是否受影响漏洞修复方法推荐阅读 漏洞基本信息 Cisco IOS XE Unauthenticatd Remote Command Execution (CVE-2023-20198) (Direct Check) Severity:Critical Vulnerability Pri…

【Jeecg Boot 3 - 第二天】2.1、nginx 部署 JEECGBOOT VUE3

一、场景 二、实战 ▶ 2.1、打包(build 前端) > Stage 1:修改配置文件 .env.production(作用:指向后端接口地址) > Stage 2:点击build(作用&#xff1…

动态规划——数塔问题(三维数组的应用)

一、例题要求及理论分析 声明:理论指导《算法设计与分析 第四版》 因为这个地方用到了三维数组,感觉很有意思就故意挑出来分享给大家(三维数组可以看成很多页二维数组) 4.5.1认识动态规划数塔问题: 如图4-12所示的一…

小型洗衣机哪个牌子质量好?迷你洗衣机排名前十名

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…

2023年最新prometheus + grafana搭建和使用+gmail邮箱告警配置

一、安装prometheus 1.1 安装 prometheus官网下载地址 sudo -i mkdir -p /opt/prometheus #移动解压后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #创建一个专门的prometheus用户: -M 不创建家目录, -s 不让登录 useradd…

web服务器之——搭建两个基于不同端口访问的网站

要求如下: 建立一个使用web服务器默认端口的网站,设置DocumentRoot为/www/port/80,网页内容为:the port is 80。建立一个使用10000端口的网站,设置DocumentRoot为/www/port/10000,网页内容为:t…

Centos7 首次 安装Mysql8.0

随笔记录 背景介绍:重装Centos7 系统,没有安装mysql 目录 1. 查看否有MariaDB与MySQL 2. MySQL官网下载适用于centos7的mysql安装包 2.1 查询服务器是x86_64架构还是arm架构 2.2 查系统版本 2.3 下载适用于系统版本安装包 2.3.1 国内镜像源下载…

@Transactional失效问题

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 关于Transactional 日…

应用在LED灯光控制触摸屏中的触摸芯片

LED灯光控制触摸屏方法,包括:建立触摸屏的触摸轨迹信息与LED灯光驱动程序的映射关系;检测用户施加在触摸屏上的触摸轨迹,生成触摸轨迹信息;根据生成的触摸轨迹信息,调用对应的LED灯光驱动程序,控…

算法-05-二分查找

二分查找(Binary Search)算法,也叫折半查找算法,是一种针对有序数据集合的查找算法。 1-二分查找的思想 我们生活中猜数字的游戏,告诉你一个数据范围,比如0-100,然后你说出一个数字&#xff0c…

​pathlib --- 面向对象的文件系统路径​

3.4 新版功能. 源代码 Lib/pathlib.py 该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 纯路径,以及从纯路径继承而来但提供 I/O 操作的 具体路径。 如果以前从未用过此模块,或不确定…

1、springboot项目运行报错

问题1:获取不到配置文件的参数 我的配置文件获取的参数如下: public class Configures{Value("${configmdm.apk.apkName}")private static String apkName;private void setApkName(String apkName) {Configures.apkName apkName;}private …