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

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

一、概述

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

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

二、概念

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

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

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

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

也是比较好理解的呀~

下面就是实现的思路了

三、思路

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

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

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

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

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

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

四、代码实现

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

将二维数组转化成稀疏数组:
数据结构之稀疏数组的实现
将稀疏数组转换成二维数组:
数据结构之稀疏数组的实现

五、结语

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

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