数据结构:逻辑结构与物理结构
逻辑结构与物理结构
- 逻辑结构
- 1. 集合结构
- 2. 线性结构
- 3. 树形结构
- 4. 图形结构
- 物理结构
- 1. 顺序存储结构
- 2. 链式存储结构
- 示例
- 逻辑结构的示例:线性表
- 物理结构的示例
- 结论
逻辑结构
逻辑结构描述了数据元素之间的逻辑关系,它是数据结构的抽象描述,通常不涉及数据的具体存储方式。逻辑结构主要分为以下几种:
1. 集合结构
- 特点:数据元素之间仅有“属于同一集合”的关系,元素之间没有其他关系。
- 示例:一个包含若干学生的集合,其中每个学生独立存在,彼此没有直接联系。
2. 线性结构
- 特点:数据元素之间存在一对一的线性关系,即每个元素有且只有一个直接前驱和一个直接后继(除了第一个和最后一个元素)。
- 常见类型:
- 数组:一个固定大小的元素序列。
- 链表:元素通过指针链接,形成线性序列。
- 栈:一种特殊的线性表,只允许在一端进行插入和删除操作。
- 队列:一种特殊的线性表,只允许在一端插入,在另一端删除。
3. 树形结构
- 特点:数据元素之间存在一对多的层次关系,通常以层级结构表示。
- 常见类型:
- 树:一个节点包含若干子节点,每个子节点也可以有自己的子节点。
- 二叉树:每个节点最多有两个子节点,分别称为左子节点和右子节点。
- 堆:一种特殊的二叉树,满足堆属性(如最大堆或最小堆)。
4. 图形结构
- 特点:数据元素之间存在多对多的关系,即每个元素可以与多个其他元素相关联。
- 常见类型:
- 图:由一组顶点和边组成,边表示顶点之间的关系。
- 有向图:边有方向,表示有向关系。
- 无向图:边没有方向,表示无向关系。
物理结构
物理结构描述了数据在计算机内存中的实际存储形式。主要有以下两种类型:
1. 顺序存储结构
- 特点:数据元素按顺序存储在连续的内存地址中。
- 优点:
- 可以直接通过下标访问元素,访问速度快。
- 内存利用率高。
- 缺点:
- 插入和删除操作复杂,可能需要移动大量元素。
- 容易造成内存碎片。
- 常见示例:
- 数组:线性表的顺序存储结构,每个元素占用相邻的内存单元。
2. 链式存储结构
- 特点:数据元素存储在不连续的内存地址中,通过指针链接形成逻辑上的序列。
- 优点:
- 插入和删除操作方便,只需修改指针。
- 不需要预先分配固定大小的存储空间,灵活性高。
- 缺点:
- 需要额外的存储空间来存储指针。
- 访问速度相对较慢,需要顺序访问。
- 常见示例:
- 单链表:每个元素包含一个数据域和一个指针域,指向下一个元素。
- 双链表:每个元素包含两个指针域,分别指向前驱和后继元素。
- 循环链表:链表的最后一个元素指向链表的第一个元素,形成一个环。
示例
逻辑结构的示例:线性表
在逻辑结构上,线性表中的元素按线性顺序排列,每个元素只有一个前驱和一个后继(第一个元素没有前驱,最后一个元素没有后继)。
A -> B -> C -> D
物理结构的示例
- 数组:在物理存储上,线性表的元素存储在连续的内存地址中。
内存地址: 0x001 0x002 0x003 0x004
数组元素: A B C D
- 链表:在物理存储上,线性表的元素存储在不连续的内存地址中,每个元素包含一个指针,指向下一个元素的地址。
内存地址: 0x005 0x010 0x020 0x030
链表元素: A -> B -> C -> D| | | |0x010 0x020 0x030 NULL
结论
理解数据结构的逻辑结构和物理结构对于算法设计和编程实现至关重要。逻辑结构帮助我们选择合适的数据组织方式来解决问题,而物理结构则决定了算法的实现细节和性能表现。选择合适的数据结构,不仅要考虑逻辑关系,还要结合物理存储方式,以达到最佳的性能和效率。
相关文章:
数据结构:逻辑结构与物理结构
逻辑结构与物理结构 逻辑结构1. 集合结构2. 线性结构3. 树形结构4. 图形结构 物理结构1. 顺序存储结构2. 链式存储结构 示例逻辑结构的示例:线性表物理结构的示例 结论 逻辑结构 逻辑结构描述了数据元素之间的逻辑关系,它是数据结构的抽象描述ÿ…...

pycharm报错:No module named pip/No module named pytest
1、问题概述? 今天在执行一个python脚本的时候,控制台提示:No module named pytest,就是没有pytest模块,于是我使用pip命令进行安装,命令如下; pip install pytest 结果又提示No module named pip,说我没有pip模块,没办法,再安装pip 2、安装pip-方式1 在pycharm的T…...

Linux:Linux权限
目录 1. Linux权限的概念 2. Linux权限管理 2.1 文件访问者的分类 2.2 文件类型和访问权限 2.2.1 文件类型 2.2.2 基本权限 2.3 文件权限值的表示方法 2.4 文件访问权限的相关设置方法 2.4.1 chmod 2.4.2 chown 2.4.3 chgrp 2.4.4 umask 3. file指令 4. Linux目…...
新版Glide检测生命周期原理
本文章使用的是glide 4.15.1 public class RequestManagerRetriever implements Handler.Callback {rivate final LifecycleRequestManagerRetriever lifecycleRequestManagerRetriever;public RequestManagerRetriever(Nullable RequestManagerFactory factory, GlideExperim…...

Ansible的脚本-----playbook剧本【上】
目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一:给被管理主机安装httpd服务 2.2 实战演练二:定义、引用变量 2.3 实战演练三:指定远程主机sudo切换用户 2.4 实战演练四:when条件判断 2.5 实战演练五&…...
sql注入学习与防护
一、SQL注入分类 SQL注入根据攻击方式的不同,可以分为以下几种类型: 数字型注入字符型注入报错注入布尔盲注时间盲注联合查询注入基于堆叠的查询注入 二、SQL注入流程 发现注入点猜测字段数确定显示字段获取数据库信息获取数据库中的表获取表中的字段获…...

饥荒dst联机服务器搭建基于Ubuntu
目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G,4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放: tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…...
AtCoder Beginner Contest 363
A - Piling Up 题意 不同的分数段有不同的^数量,Takahashi想要使得他的^数量增加,问他所需要的最少分数增幅。 思路 我们只需要找到下一阶段的下限。 a / 100 是本阶段 1 变成下一阶段,再 * 100变成下限,再与原来的相减即可…...
Protel DXP 面试题详解及参考答案(4万字长文)
解释Protel DXP的基本工作流程。 Protel DXP(现已更名为Altium Designer)是一款用于电子设计自动化(EDA)的软件,主要应用于印刷电路板(PCB)设计。其基本工作流程通常包括以下几个阶段: 项目创建与配置: 开始一个新的设计项目时,首先需要创建一个项目文件,在这个文件…...

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter
1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid,使用中发现唯一建冲突,生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…...

【AutoDL】AutoDL+Xftp+Xshell+VSCode配合使用教程
身边没有显卡资源或不足以训练模型时,可以租赁服务器的显卡。 1、AutoDL Step :注册账号->选择显卡->选择环境->开机启动 1.1 首先打开AutoDL官网,注册账号 1.2 租赁自己想要的显卡资源 1.3 选择基础环境。 此处,我们让其自动配置…...

使用minio cllient(mc)完成不同服务器的minio的数据迁移和mc基本操作
minio client 前言使用1.拉取minio client 镜像2.部署mc容器3.添加云存储服务器4.迁移数据1.全量迁移2.只迁移某个桶3.覆盖重名文件 5.其他操作1.列出所有alias、列出列出桶中的文件和目录1.1.列出所有alias1.2.列出桶中的文件和目录 2.创建桶、删除桶2.1.创建桶2.2.删除桶 3.删…...

Vue3分段控制器(Segmented)
效果如下图:在线预览 APIs Segmented 参数说明类型默认值必传block是否将宽度调整为父元素宽度,同时所有选项占据相同的宽度booleanfalsefalsedisabled是否禁用booleanfalsefalseoptions选项数据string[] | number[] | SegmentedOption[][]falsesize控…...

SpringSecurity如何正确的设置白名单
在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…...
【Langchain大语言模型开发教程】评估
🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Example generation 2、Manual evaluation and debug 3、LLM-assisted evaluation 4、LangChain evaluation platform 1、引包、加载环境变量; import osfrom dotenv imp…...
Python爬虫小项目实战
1.自动获取小说多个章节内容 2.获取英雄联盟里面的全部英雄 3. 简单地自动抽奖系统 4. 简单地点赞系统 5. 制作查询手机号工具 6. 制做登录系统 7. 操作excel办公自动化 8. 自动批量保存图片 9. 获取NBA数据 10. 获取彩票信息 11. 获取房地产信息 12. 获取小说…...
PHP Filesystem 简介
PHP Filesystem 简介 PHP 是一种广泛使用的开源服务器端脚本语言,特别适用于网页开发。在 PHP 中,Filesystem 是一个功能丰富的库,提供了一系列用于文件系统操作的函数。这些函数允许开发者读取、写入、修改和删除文件和目录,以及执行其他与文件系统相关的任务。 PHP Fil…...

源代码加密软件哪家好?五款企业级加密软件推荐
随着软件开发行业的快速发展,源代码作为核心资产,面临着越来越大的安全威胁。保护源代码不被泄露或盗用,是每个开发团队和企业都需要高度重视的问题。源代码加密软件通过对代码进行加密处理,确保其在传输和存储过程中保持机密性。…...
Redis常见的数据类型及操作方式
一、通用命令 1)获取redis中所有key keys * 2)删除一个或多个key del key1 key2 ... 3)判断key是否存在 exists key 4)给key添加过期时间 expire key time 5)查看key剩余过期时间 ttl key 6) 查看redis内存…...

谷粒商城实战笔记-55-商品服务-API-三级分类-修改-拖拽数据收集
文章目录 一,拖拽后结点的parentCid的更新二,拖拽后结点的父节点下所有结点的sort排序属性的变化更新排序的逻辑代码分析 三,拖拽后结点及其子节点catLevel的变化判断是否需要更新 catLevel获取拖动后的新节点 更新 catLevel完整代码 这一节的…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...