JAVA整理学习实例(四)数据结构

news/2025/2/12 9:09:51/

JAVA整理学习实例(四)数据结构

注:不积跬步,无以至千里,学习之路,任重而道远。很多技术,学着学着就回到了理论上。基础知识很差,博客写起来很难。。。写的不对的和不好的,希望不会误导老铁们,有错误的可以直接指出来。

前言

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,选择合适的数据结构可以带来更高的运行或者存储效率。

数据结构可以划分为逻辑结构和存储结构。

一、存储结构

数据的存储结构是指数据的逻辑结构在计算机中的表示。

也称为数据的物理结构,是数据的逻辑结构在计算机中的实现。

存储结构分四类:顺序存储、链式存储、索引存储和散列存储。

1.顺序存储

顺序存储方式是指将所有的数据元素放在一段连续的存储空间中,并使逻辑上相邻的数据元素其对应的物理存储位置也是相邻的(即保证逻辑位置关系与物理位置关系的一致)。顺序存储结构通常借助程序设计语言中的数组来加以实现。

在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。

特点:

1、随机存取表中元素(直接通过首个数据元素地址计算需要查找的元素的内存地址,因此访问特定元素效率很高)。

2、数据存储密度大(实际使用中,当有大量数据时,分配一块连续的大内存空间会比较难)。

3、插入和删除效率低;因为要保持数据连续,在操作数据后,需要移动元素以保持连续性。

2、链式存储

在计算机中,链式存储结构不要求逻辑上相邻的结点在物理位置上亦相邻,链式存储结构是借助数据元素之间的元素的指针表示数组元素的逻辑结构。

特点:

1、每个结点是由数据域和指针域组成。

2、结点之间是逻辑上相邻,而物理存储上不需要相邻(随机存储,由指针指向数据结点)。

3.数据存储密度小;小于顺序存储(由第2点可知;在同样大小的空间内,存储数据的话,链式存储占用内存更大,因此存储的数据量就少)。

4、插入、删除效率高;因为不需要移动数据,只需要改动数据结点指针。

5、查找数据结点时,链式存储要比顺序存储慢,因为是线性结构,所以查找数据需要遍历结点。

3、索引存储(顺序存储+索引

存储方式是,分别存放数据元素和元素间关系的存储方式。

即建立存储结点信息外,还建立附加的索引表来标识结点的地址,索引表由若干索引项组成。

特点:

1.增加了索引的存储,所以会占用更大的空间。

2.查询速度快。(为什么快? 有序?索引的逻辑结构?)

3.存储速度变慢,以为要增加了索引的写入。

另外,这个索引只有数据库中使用的多吗,好像很少看到其他应用场景。

4、散列存储(顺序存储+散列计算

散列存储,又称hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定对应关系的查找技术。

即建立存储结点信息外,还建立附加的索引表来标识结点的地址,索引表由若干索引项组成。

特点:

1.通过计算获得存储地址,所以能够快速实现数据的访问。

2.hash算法冲突会影响效率。需要额外的方式解决hash冲突(拉链法,开放寻址法,再hash法等等)

二、 逻辑结构

指反映数据元素之间的逻辑关系的数据结构。逻辑关系是指数据元素之间的前后间关系,而与他们在计算机中的存储位置无关

逻辑结构包括(百度,数据结构)

1、集合结构:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;

2、线性结构:数据结构中的元素存在一对一的相互关系;是一个有序数据元素的集合。

1.线性结构是非空集。

2.集合中必存在唯一的一个"第一个元素";

3.集合中必存在唯一的一个"最后的元素";

4.线性结构有且仅有一个开始结点和一个终端结点。

5.线性结构所有结点都最多只有一个直接前驱结点和一个直接后继结点。线性表就是典型的线性结构。

常用的线性结构有:线性表,栈,队列,双队列,串(一维数组)。

常见的非线性结构有:多维数组(二维及以上),广义表,树(二叉树等),图。

3、树形结构:数据结构中的元素存在一对多的相互关系;

4、图形结构:数据结构中的元素存在多对多的相互关系。

数据结构有很多种,一般来说,按照数据的逻辑结构对其进行简单的分类,包括线性结构和非线性结构两类


http://www.ppmy.cn/news/1233202.html

相关文章

PaddleDetection训练目标检测模型

PaddleDetection训练目标检测模型 一,安装标注软件二,数据标注和清洗三,安装PaddleDetection环境四,修改配置文件,本文选择的是 PP-PicoDet算法五,训练模型六,训练完成之后导出模型七&#xff0…

uniapp开发断小程序-如何判断小程序是在手机端还是pc端打开

官方说明 https://developers.weixin.qq.com/miniprogram/dev/devtools/pc-dev.html 小程序如何判断是 PC 平台? 通过 getSystemInfo 官方接口(platform 是 windows) 通过 UA(PC UA 包含 MiniProgramEnv/Windows) …

webGL技术开发的软件类型

WebGL 是一种在浏览器中渲染 2D 和 3D 图形的 JavaScript API。通过 WebGL,你可以创建各种类型的软件项目,特别是那些需要强大图形渲染能力的项目。以下是一些你可以使用 WebGL 实现的软件项目类型,希望对大家有所帮助。北京木奇移动技术有限…

许战海战略文库|从丰田到等离子屏:技术领先为何失去市场?

引言:在探讨技术创新与市场需求之间的微妙关系时,个关键的问题浮现:为什么强大的技术优势并不总是等同于市场成功?从丰田汽车在电动车领域的挑战到日本等离子显示屏技术的衰落,市场趋势对企业成功存在决定性影响。企业需要在技术创新和市场需求之间找到…

jetpack compose中实现丝滑的轮播图效果

写在前面 最近在翻Jetpack库,发现了DataStore,官方是这么说的: Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。 …

使用OpenCV将图像转换为NV12格式并加载NV12数据

摘要:在新项目中,需要为上层应用开放几个接口,但又不想让上层应用过多依赖OpenCV。本文将详细介绍如何使用C和OpenCV,通过加载图片并转换为NV12格式,实现对图像数据的处理,以及如何加载NV12数据并显示。这些…

centos7安装VMware报错“Cannot open /dev/vmmon: No such file or directory”

1.安装完成后运行VMware 可以正常安装VMware虚拟机,但安装完成开启虚拟机会提示如下信息: “Cannot open /dev/vmmon: No such file or directory. Please make sure that the kernel module vmmon’ is loaded” 这样在VMware中安装其它系统时&#xf…

向上转型 向下转型 重写 多态 ---java

目录 一. 向上转型 1.1 概念 1.2 语法格式 1.3 动态绑定引入 1.4 重写的引入 1.5向上转型的使用方式 方式一: 直接赋值 方式二: 通过传参,进行向上转型(多态引入) 方法三:通过返回值, 进行向上转型 二. 重写 2.1 概念 2.2 重写的格式 2.3 重写的规则 【重写和重…