1.专题 存储结构和逻辑结构

news2024/11/29 4:06:44

1. 存储结构

软件完成对象抽象,需要分配一定的内存资源。
根据对象对内存使用的特征,可以把数据存储的特征划分为:

  • 顺序存储
  • 链接存储
  • 索引存储 和 散列存储

1.1 顺序存储

对象占用的资源表现为一段连续的内存存储

图示如下:
MAX_SIZE表示数组容量
ele_lenth 表示元素个数
在这里插入图片描述

1.2 链接存储

对象占用的内存资源表现为一段内存和另一段内存单点间的链接

图示如下:
单向(循环)链接,左侧节点为 FIRST
双向链接,左侧为left end,右侧为right end
在这里插入图片描述
只包含有一个节点的链表存储
在这里插入图片描述

1.3 索引存储

[table]是一个指针数组,容量使用[MAX_SIZE]表示
指针表中有效指针个数表示为[lenth]
在这里插入图片描述

比如下图:在这里插入图片描述

1.4 散列存储

散列映射特征值/关键字 为一个整形数字:pos
pos表示一个指针数组的索引号,该指针可能指向一个数组,一个链表或其他数据结构:如果用户要求的数据存在,那么就应该存储在这个数据结构里
在这里插入图片描述

1.4.1 散列+箱子

示例:68或者88作为key,pos计算出来都是8;
hash table取出index为8的表项,这个结构体中可能存储着key68或者key 88的数据;
如果对应的结构体,key字段是88,那么就是key 88需要的数据。
但是因为箱子当中只能存储一个数据,这样key 68应该存储在哪里呢?我们定一个规则:当没有位置存放key68时,把key68存放到紧邻的下一空表项

  • 查找
    f(key)计算pos,查看pos是否命中直到:
    01表项key 命中
    02表项未命中,向下查找,找到空表项,返回没有元素
    03表现回到pos,返回没有元素
  • 添加
    f(key)计算pos,查看pos是否被占用直到:
    01 表项没有被占用 ,写入数据(返回成功)
    02 表项已经被占用,写入下一个空表项(返回成功)
    03 没有找到空表项,返回溢出状态
    在这里插入图片描述

1.4.2 散列+链表

示例:使用key68或者key88计算出pos = 8,那么如果两个key的数据存在,一定存在于pos = 8的链表上

在这里插入图片描述

1.5 总结

对象内存 的 存储结构是设计对象时首先要考虑的事情

2. 逻辑结构

2.1 综述

  • 逻辑结构 表示构成对象的子元素之间的关系

2.2 数据表

如果对象间元素没有时间上的关系,那么他们构成的组合是一张表,供使用者存储和查询用。

此意义上数据表可以使用顺序存储、链接存储、索引存储、散列存储均可

2.3 时间序: 队列 FIFO(先进先出)

2.3.1 数组描述

规则A:front位置永远为0
在这里插入图片描述
规则B:front位置小于rear位置
在这里插入图片描述
在这里插入图片描述

2.3.2 链表描述

[rear]和[front]分别为一个指针,两种描述类型复杂度相近
在这里插入图片描述
在这里插入图片描述

2.4 时间序:栈 LIFO(后入先出)

2.4.1 数组描述

[top] 最后放入的数据
[bottom] 最先放入的数据
在这里插入图片描述

2.4.2 链表描述

在这里插入图片描述

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

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

相关文章

产品分享:Qt鸿途电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0

​若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128313385 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、…

使用notepad++插件远程编辑linux下的配置文件

目录 1.安装插件管理器(Plugin Manager) 2.安装NppFTP 3.使用nppFTP连接远程linux服务器 1.安装插件管理器(Plugin Manager) 如果没有则需要安装 32bit 在v7.50后(包括7.50)不带有插件管理器(Plugin Manager),所以我们需要手动安装 Plug…

高校房产管理系统主要功能模块有哪些?

数图互通房产管理 数图互通高校房产管理系统是基于公司自主研发的FMCenterV5.0平台,是针对中国高校房产的管理特点和管理要求,研发的一套标准产品;通过在中国100多所高校的成功实施和迭代,形成了一套成熟、完善、全生命周期的房屋…

Spire.XLS for Java 12.11.8 新年/圣诞巨献

Spire.XLS for Java是一个专业的 Java Excel API,使开发人员无需使用 Microsoft Office 或 Microsoft Excel即可创建、管理、操作、转换和打印 Excel工作表。 谷歌轻松找破解版 Spire.XLS for Java 支持旧的 Excel 97-2003 格式(.xls)和新的…

KingbaseES V8R3集群备份恢复案例之--- timingbackup备份

案例说明: KingbaseES V8R3集群自带了timingbackup.sh的脚本,可以通过一个脚本执行逻辑和物理备份,逻辑备份采用sys_dump,物理备份适用sys_basebackup,本案例详细记录了脚本的使用。 适用版本: KingbaseES …

利用催眠技巧绕开OpenAI的内容政策限制(仅供研究使用)

fork的仓库:https://github.com/JanYork/chatgpt-chinese-prompt-hack 声明:请仅作研究之用,不要违规使用! 在hack成功后,通过屏蔽moderetions的api请求,可以绕过OpenAI对于输出内容的审查. 地址为:https://chat.openai.com/back…

国产免费倾斜摄影模型在线发布平台,一键查看、编辑、分享场景!

数十GB庞大的城市级三维实景模型,想在Web端加载并实时交互,看到每块地形、建筑物、每寸土地细节,不是一般平台能承受的。一般只能靠人工手动将模型压缩,不仅耗时耗力,效果还不可控。毕竟城市级的大体量模型不是每台设备…

物联网通信技术第9章 异构网络协同通信

9.1 异构网络模型 发展趋势 :用户对数据业务和移动业务的需求日渐增加,使用户需求呈现个性化、多样化等特点。 在异构多模式网络系统中,移动用户可以通过多模式多接口特性连接任一种网络。 异构网络: 指两个或以上的无线通信系统…

Meta AI 更新的 Data2vec 2.0 | 实现更快、更高效的视觉、语音和文本的自监督学习

文章目录一、前言二、data2vec 2.0 是如何工作的三、使用 data2vec 2.0 提高效率四、总结CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 论文地址:Data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Langua…

MySQL - 1

Step1 : 下载 (https://downloads.mysql.com/archives/community/) ZIP版本免安装,直接解压 版本:5.7.31 文件名:Windows (x86, 64-bit), ZIP Archive Step2:解压 路径建议:C:\Program Files\m…

JAVA中的注解可以继承吗?

前言 注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的Service,Component等。那么今天我想问大家的是类被继承了,注解能否继承呢?可…

五、Docker 镜像发布阿里云、私有库(详解、实操)第二篇

第一篇连接:https://blog.csdn.net/u011837804/article/details/128311791 3、本地镜像发布到私有库 3.1、Docker Registry是什么 Registry 是一个无状态、高度可扩展的服务器端应用程序,用于存储并允许您分发 Docker 镜像。 如果学过maven 就知道maven有私服,那这个就是…

[附源码]Python计算机毕业设计Django基于SpringBt的演唱会购票系统论文2022

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

技术分享 | 一文带你了解测试流程的体系

软件测试是软件质量保证的关键步骤。越早发现软件中存在的问题,修复问题的成本就越低,软件质量也就越高,软件发布后的维护费用越低。 为了能更好的保障软件质量,在软件测试的实践中,慢慢形成了一些流程用来达到这一目…

mybatis05:MyBatis核心配置文件深入、typeHandlers、plugins

目录 项目搭建前置准备 1.1 typeHandlers标签 1.2 plugins标签-分页 1.3知识小结 项目搭建前置准备 相关依赖 <dependencies><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId&…

IOS证书获取(证书profile文件,p12私钥证书,证书私钥密码,Bundle ID)

当我们在开发一个应用APP时需要真机测试&#xff0c;或者上架到对应的应用市场&#xff0c;这时就需要 App打包&#xff08;打包流程&#xff09;&#xff0c;那么打包时就需要Bundle ID、证书私钥密码、证书profile文件、私钥证书。 申请这些资料需要在苹果开发者中心获取 首…

【DBN回归预测】基于麻雀算法优化深度置信网络SSA-DBN实现数据回归多输出预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

基于C++开发的(控制台)学生管理系统【100010039】

一、项目技术路线说明 学生信息管理系统所使用的编程语言是C语言。C语言具有面向对象的特点&#xff0c;给编写程序带来了极大地方便。学生信息管理系统程序设计通过抽象、封装、继承和多态使程序代码达到了很大限度的可重用和可扩展。而程序中的多种多样的类是此次程序设计的…

网络工程毕业设计 SSM在线课堂学习设计与实现(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的在线课堂…

JBoss漏洞 - CVE-2010-0738 CVE-2015-7501

文章目录CVE-2010-0738漏洞简介影响版本漏洞利用POCCVE-2015-7501漏洞简介漏洞环境漏洞搭建漏洞发现漏洞利用JMX Console安全验证绕过 CVE-2010-0738 漏洞简介 利用原理与CVE-2007-1036相同&#xff0c;只不过利用HEAD请求方法绕过GET和POST请求的限制 影响版本 jboss4.2.0-…