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

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

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

什么是逻辑结构?

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

什么是线性结构?

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

什么是非线性结构?

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

在这里插入图片描述

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

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

什么是物理结构?

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

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

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

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

Q&A

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

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

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

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

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

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

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

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

相关文章

HCIA-H12-811题目解析(5)

1、【单选题】 以下关于Hybrid端口说法正确的有? 2、【单选题】使用命令"vlan batch 10 20"和"valn batch 10 to 20",分别能创建的vlan数量是?() 3、【单选题】二层ACL的编号范围是?…

Scala日志log4j,序列化Gson

一、日志输出log4j 1. Scala中配置log4j依赖 对于 Maven 项目,可以在 pom.xml 文件中添加以下内容: <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency>2.创建…

VueUse工具库

VueUse VueUse不是Vue.use&#xff0c;它是为Vue 2和3服务的一套Vue Composition API的常用工具集&#xff0c;是目前世界上Star最高的同类型库之一。它的初衷就是将一切原本并不支持响应式的JS API变得支持响应式&#xff0c;省去程序员自己写相关代码。 VueUse 是一个基于 …

Java毕业设计 SSM SpringBoot 在线学习系统

Java毕业设计 SSM SpringBoot 在线学习系统 SSM SpringBoot 在线学习系统 功能介绍 首页 图片轮播 视频推荐 在线学习 学习介绍 评论 收藏 资料中心 资料详情 下载资料 话题讨论 文档发布 试题中心 系统公告 登录 注册学生 个人中心 试题记录 错题本 我的收藏 算法演示 结果分…

C语言 害死人不偿命的(3n+1)算法 挖掘机技术哪家强 选择排序 贪心算法

1.害死人不偿命的&#xff08;3n1)算法 卡拉兹( Calatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员…

持续集成交付CICD:Jenkins使用GitLab共享库实现前后端项目Sonarqube

目录 一、实验 1.Jenkins使用GitLab共享库实现后端项目Sonarqube 2.优化GitLab共享库 3.Jenkins使用GitLab共享库实现前端项目Sonarqube 4.Jenkins通过插件方式进行优化 二、问题 1.sonar-scanner 未找到命令 2.npm 未找到命令 一、实验 1.Jenkins使用GitLab共享库实现…

Vue学习笔记-Vue3中ref和reactive函数的使用

前言 为了让vue3中的数据变成响应式&#xff0c;需要使用ref,reactive函数 ref函数使用方式 导入ref函数 import {ref} from vue在setup函数中&#xff0c;将需要响应式的数据通过ref函数进行包装&#xff0c;修改响应式数据时&#xff0c;需要通过: ref包装的响应式对象.val…

Flink之迟到的数据

迟到数据的处理 推迟水位线推进: WatermarkStrategy.<Event>forBoundedOutOfOrderness(Duration.ofSeconds(2))设置窗口延迟关闭&#xff1a;.allowedLateness(Time.seconds(3))使用侧流接收迟到的数据: .sideOutputLateData(lateData) public class Flink12_LateDataC…

力扣编程题算法初阶之双指针算法+代码分析

目录 第一题&#xff1a;复写零 第二题&#xff1a;快乐数&#xff1a; 第三题&#xff1a;盛水最多的容器 第四题&#xff1a;有效三角形的个数 第一题&#xff1a;复写零 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 上期…

【SpringBoot教程】SpringBoot 统一异常处理(附核心工具类-ErrorInfoBuilder)

作者简介&#xff1a;大家好&#xff0c;我是撸代码的羊驼&#xff0c;前阿里巴巴架构师&#xff0c;现某互联网公司CTO 联系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗…

曲线分板机主轴有何特点?如何选择合适的曲线分板机主轴?

在现代工业领域&#xff0c;分板机主轴作为重要的机械部件&#xff0c;其性能和质量对于生产效率和产品质量具有至关重要的影响。而在这其中&#xff0c;曲线分板机主轴则因为其独特的优势而被广泛应用于PCB电路板的切割和分板。面对市场上众多的曲线分板机主轴品牌&#xff0c…

【深度学习】loss与梯度与交叉熵的关系

问的GPT3.5 模型训练时loss与梯度的关系&#xff1f; 在深度学习模型训练过程中&#xff0c;loss&#xff08;损失函数&#xff09;与梯度&#xff08;gradient&#xff09;之间存在密切关系。损失函数衡量模型在给定输入上的预测输出与实际输出之间的差距&#xff0c;而梯度则…

Leetcode 2958. Length of Longest Subarray With at Most K Frequency

Leetcode 2958. Length of Longest Subarray With at Most K Frequency 1. 解题思路2. 代码实现 题目链接&#xff1a;2958. Length of Longest Subarray With at Most K Frequency 1. 解题思路 这一题思路上其实也很简单&#xff0c;就是一个滑动窗口的思路&#xff0c;遍历…

前端知识(十三)——JavaScript监听按键,禁止F12,禁止右键,禁止保存网页【Ctrl+s】等操作

禁止右键 document.oncontextmenu new Function("event.returnValuefalse;") //禁用右键禁止按键 // 监听按键 document.onkeydown function () {// f12if (window.event && window.event.keyCode 123) {alert("F12被禁用");event.keyCode 0…

RNN循环神经网络python实现

import collections import math import re import random import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2ldef read_txt():# 读取文本数据with open(./A Study in Drowning.txt, r, encodingutf-8) as f:# 读取每一行l…

软件测试之缺陷管理

一、软件缺陷的基本概念 1、软件缺陷的基本概念主要分为&#xff1a;缺陷、故障、失效这三种。 &#xff08;1&#xff09;缺陷&#xff08;defect&#xff09;&#xff1a;存在于软件之中的偏差&#xff0c;可被激活&#xff0c;以静态的形式存在于软件内部&#xff0c;相当…

【隐马尔可夫模型】隐马尔可夫模型的观测序列概率计算算法及例题详解

【隐马尔可夫模型】用前向算法计算观测序列概率P&#xff08;O&#xff5c;λ&#xff09;​​​​​​​ 【隐马尔可夫模型】用后向算法计算观测序列概率P&#xff08;O&#xff5c;λ&#xff09; 隐马尔可夫模型是关于时序的概率模型&#xff0c;描述由一个隐藏的马尔可夫链…

Elbie勒索病毒:最新变种.elbie袭击了您的计算机?

引言&#xff1a; 在数字时代&#xff0c;.Elbie勒索病毒的威胁越发突出&#xff0c;对个人和组织的数据安全构成了巨大挑战。本文将深入介绍.Elbie勒索病毒的特征&#xff0c;有效的数据恢复方法&#xff0c;以及一系列预防措施&#xff0c;帮助您更好地保护数字资产。当面对…

线性规划-单纯形法推导

这里写目录标题 线性规划例子啤酒厂问题图解法 单纯形法数学推导将问题标准化并转为矩阵形式开始推导 实例图解法单纯形法 线性规划例子 啤酒厂问题 每日销售上限&#xff1a;100箱啤酒营业时间&#xff1a;14小时生产1箱生啤需1小时生产1箱黑啤需2小时生啤售价&#xff1a;2…

从零开发短视频电商 AWS OpenSearch Service开发环境申请以及Java客户端介绍

文章目录 创建域1.创建域2.输入配置部署选项数据节点网络精细访问控制访问策略 获取域端点数据如何插入到OpenSearch ServiceJava连接OpenSearch Servicespring-data-opensearchelasticsearch-rest-high-level-clientopensearch-rest-clientopensearch-java 因为是开发测试使用…