稀疏数组
稀疏数组的概念
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。其具有代表性的应用场景为五子棋的存盘,利用存盘可以重新恢复原来的数组。
稀疏数组的处理思想
记录稀疏数组中有几行几列,有几个不同的值
假设黑棋为1,白棋为2,未下子的地方为0,则将棋盘以数组的形式展现。
把具有不用值的元素记录在一个小规模的数组中,从而缩小程序规模
利用现有的表格新产生一个数组。我们获得的这个数组就是我们所需要的。
稀疏数组的实现
遍历数组,获取有效数据
int num=0;
//查找有效数据
for (int i=0;i<arr.length;i++){
for(int k=0;k<arr[i].length;k++){
if(arr[i][k]!=0){
num++;
}
}
}
根据有效数据创建稀疏数组
//建立稀疏数组
int sum[][]=new int[num+1][3];
int count=1;//凑用计数器的原理
sum[0][0]=11;//原数组行数
sum[0][1]=11;//原数组列数
sum[0][2]=num;//共有多少个原数据
将有效数据存入稀疏数组
for (int i=0;i<arr.length;i++){
for(int k=0;k<arr[i].length;k++){
if(arr[i][k]!=0){
sum[count][0]=i;
sum[count][1]=k;
sum[count][2]=arr[i][k];
count++;//计数器计数增加
}
}
}
// 输出稀疏数组
for(int a[]:sum){
for (int i:a){
System.out.print(i+" ");
}
System.out.println();
}
}
同样利用稀疏数组可以重新生成原数组。
自我感悟
这是我的第一篇关于数据结构方面的文章,也是我个人对于稀疏数组的一些理解,如果对大家有帮助自然是极好的,如果有不足的地方,也希望大家帮忙指点迷津。