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

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、图形结构:数据结构中的元素存在多对多的相互关系。

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

相关推荐
wenyq75 分钟前
LeetCode 152. Maximum Product Subarray
java·算法·leetcode
余额瞒着我当琳6 分钟前
C++异常,异常的概念,异常抛出与捕获,RAII 和智能指针的设计思路,C++标准库一些指针的使用
java·开发语言·c++·算法
東隅已逝,桑榆非晚7 分钟前
map和set的使用
数据结构·c++·笔记·学习
dadaobusi11 分钟前
error:field ifru_addr has incomplete type sockaddr
学习
花间相见23 分钟前
【macOS开发环境:Java配置】—— Mac上的Java版本管理-SDKMAN安装、多版本切换与项目实战
java·架构·个人开发
骑着蜗牛撵大象32728 分钟前
大模型 SDK 编译就崩?用 CMakeLists 把 httplib、JSON 与 OpenSSL 装配成可复用的 ChatServer
android·java·c++·http·json·cmake·大模型sdk
码智社32 分钟前
Redis生产环境高频踩坑总结(Java后端视角)
java·数据库·redis
江苏汉软39 分钟前
制造企业为什么需要MES
java·数据库·制造·mes系统·mes软件
Z21-X1 小时前
云原生运维笔记:硬核拆解OpenStack计算与存储——从主机聚合到Cinder挂载全流程
运维·笔记·学习·云原生·openstack