稀疏数组竟如此简单

本文通过五子棋游戏场景,解释了为何需要使用稀疏数组来节省存储空间。详细介绍了稀疏数组的定义,如何从二维数组转换为稀疏数组,以及如何将稀疏数组还原为二维数组的过程,提供了具体的代码实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从一个场景来分析,为什么需要稀疏数组!

二维数组

在这里插入图片描述
我们以一个二维数组模拟五子棋为例,用二维数组模拟创建一个棋盘,数字1代表黑子,二代表白子。在某些场景下,我们需要保存游戏的进度,如果采用原始的二维数组的方式进行保存的话,我们可以看见存储量是非常大的。
所以,当我们采用稀疏数组进行存储后是这个样子的:
在这里插入图片描述
我们可以看出稀疏数组给我们节约了相当一部分的空间。

定义

稀疏数组也是一个数组,可以把它看成是一个普通数组的压缩。(一般情况下我们认为如果一个数组的无效数据量远大于有效数据的情况下,对数组进行压缩)

稀疏数组的存储

第一列 第二列 第三列
原始数组的行数 原始数组的列数 原始数组有效数据的个数
原始数组非零位所作在行索引 原始数组非零位所在列索引 原始数组非零位的值

拿上述五子棋的例子来说:
原始二维数组,一共拥有11行,11列,有效数据的个数为2个
原始数组的第二行,第三列有一个有效数据1,它所对应的行索引为1,列索引为2,值为1。所以在稀疏数组中的存储为

11 11 2
1 2 1
2 3 2

这样就将原始的二维数组压缩成了一个稀疏数组!

代码实现

1、创建一个二维数组

//创建一个原始的二维数组 11*11
        //0:没有棋子,1:表示黑子,2:白子

        int chessArr1[][]=new int[11][11];
        chessArr1[1][2]=1;
        chessArr1[2][3]=2;
        System.out.println("原始的二维数组"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LLLDa_&

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

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

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

打赏作者

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

抵扣说明:

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

余额充值