数据结构笔记

数据机构笔记

数组

定义:
是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
特点

1、里面的所有的数据的类型必须要保持一致性(例如:int[6] 表示该数组里面的数据为整形的)
2、在计算机里面的储存空间也是连续的。数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
3、数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。


注意 :
1、在特点里面总结的它在计算机里面的存贮为连续的空间,那么有二维数组和三维数组,它们的空间地址应该怎么算呢?将其进行降维度进行想就好了。
2、在数组的下标都是从0开始取的。

稀疏数组

产生背景:在二维数组学习的时候,大家会发现有时候出现很多毫无意义且冗余的数据,列如:(在五子棋游戏的开发中的时候,我们记录棋盘的数据;在地图坐标中标注地点的时候总有很多没有意义的数据)

实际的例子:用一个二维数组来记录上一局的棋子的位置,肯定是想到用二维数组来记录比较方便,接下来我用一般人的思维来处理看看:(首先我们规定0表示是没有棋子,1表示黑子,2表示黑子,试着来记录一盘15*15规格的棋盘)

棋盘的位置如图。
在这里插入图片描述

那么简单粗暴的方式来记录这张表就应该是

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 2 1 0 0 0 0 0 0 0 0

0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 2 0 0 0 0 0 0 0

0 0 0 1 2 1 1 1 0 0 0 0 0 0 0

0 0 2 0 2 1 2 0 2 0 0 0 0 0 0

0 0 0 0 0 2 2 0 0 0 0 0 0 0 0

0 0 0 0 0 0 2 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

发现了什么吗?

首先就是我们的二维数组里面的有效数据就是21个,而无效数据0占据了很多的空间,并且如果存盘,那么当数据量大的时候对IO流的操作是否就降低了性能了。

所以就引入了我们现在的主题了,稀疏数组来处理。

那么接下来看看稀疏数组的处理方式吧。

稀疏数组的处理思路

1、数组的列数总是确定的为三列,分别是对应原数组的行、列、值

2、数组的第一行记录的是原数组的列、行、和有效的值个数

3、从第二行起开始记录所处位置的行和列分别对应什么值
咱们通过稀疏数组来记录上面的数组的长相就是 注意:数组的下标都是从0开始计数的。

row column value

0(第一行) 15 15 21

1(第二行) 1 7 1

2(第三行) 2 5 2

3(第四行) 2 6 1

…(一共二十多个,我就不一 一对应了)

那么想象一下,这样一来我们的数据是不是就进行了压缩了?原来需要15 * 15=175个数据,转化为稀疏数组后只需要21 * 3=36个数据来存储。

说了那么多的,也要上代码来实现一下相对应的转换,这个才是实际的,那么好,接下来我们来进行

Java代码的实现

开始之前还是要讲一讲思路吧,直接上图
图片1001

具体核心的代码实现:

public static int[][] arrayToSparseArray(int[]<
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TTQYXW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值