数据结构之稀疏数组的实现

一、概述

当我们编写一个二维数组时,可能会存在着许多数据重复的情况,如下图:

在这里插入图片描述
这样可能会造成程序的运行缓慢,不够简洁。那么我们是否能有一种方式,将这个数组压缩,使其化简为一个简洁、不冗余的二维数组呢? 下面就引出我们稀疏数组的概念。

二、概念

下图为原二维数组转换为稀疏数组的样式:

在这里插入图片描述

1. 其第一行第一列代表原二维数组的行数
2. 其第一行第二列代表原二维数组的列数
3. 其第一行第三列代表原二维数组的不同元素的个数

4. 第二行与第三行则代表不同元素在原数组中的位置

也是比较好理解的呀~

下面就是实现的思路了

三、思路

将二维数组转化成稀疏数组:

1.首先我们遍历原数组,可以得到原数组中不同数据的个数,我们假设为sum;
2.接下来我们根据sum,就可以相对应的创建一个稀疏数组 Arr int[sum+1][3];
(注:sum+1 是因为我们的稀疏数组第一行存的是原始数组的行、列以及不同数据个数
后面的 3 列 是因为我们仅仅只需要三列数据)
3.将原始二维数组中的有效数据存放到稀疏数组中。

这样我们的第一步就大功告成了~
但是我们转换成稀疏数组后,也要想办法将其转换回来呀!

将稀疏数组转换成二维数组:

1.首先我们读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组。
2.接下来继续读取稀疏数组剩下的几行,然后赋值给原始的二维数组就行。

最后,上代码。详细说明。

四、代码实现

首先
在这里插入图片描述

将二维数组转化成稀疏数组:
在这里插入图片描述
将稀疏数组转换成二维数组:
在这里插入图片描述

五、结语

整体的思路流程我觉得挺清晰的。而且我觉得这个知识点,在未来的开发中也会起到挺大的帮助(尽管我现在还没用到)。能够极大的提高代码的运行效率,以及质量。

做个笔记,自己日后遗忘的时候,也能够翻出来看看~
也希望能够帮助到其他的小伙伴呀~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值