看一个实例
基本介绍
应用实例
代码
package cn.dataStructures.sparsearray;
public class SparseArray {
public static void main(String[] args){
//创建一个二维数组 11*11
//0:表示没有 1:表示黑子 2:表示白子
int chessArr[][]=new int[11][11];
chessArr[1][2]=1;
chessArr[2][3]=2;
//输出原始二维数组
System.out.println("原始二维数组");
for(int[] row:chessArr){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//将二维数组转变成稀疏数组
//1.先遍历二维数组 得到非0数据得个数
int sum = 0;
for (int i=0; i<11; i++){
for (int j=0;j<11;j++){
if (chessArr[i][j]!=0){
sum++;
}
}
}
//输出下应该有两个数
//System.out.println(sum);
//2。创建对应得稀疏数组
int sparsArr[][]=new int[sum+1][3];
//给稀疏数组赋值
sparsArr[0][0]=11;
sparsArr[0][1]=11;
sparsArr[0][2]=sum;
//遍历二维数组 将非0值放到sparsArr中
//count是用于记录是第几个非0数据
int count=0;
for (int i=0; i<11; i++){
for (int j=0;j<11;j++){
if (chessArr[i][j]!=0){
count++;
sparsArr[count][0]=i;
sparsArr[count][1]=j;
sparsArr[count][2]=chessArr[i][j];
}
}
}
//输出稀疏数组的形式
System.out.println("得到稀疏数组--");
//遍历出稀疏数组
for(int i=0; i< sparsArr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",sparsArr[i][0],sparsArr[i][1],sparsArr[i][2]);
}
System.out.println();
/**
* 将悉数数组---恢复成 原始二维数组
* 1.先读取二维数组的第一行,根据第一行的数据,创建原始的二维数组,
* 2.在读取稀疏数组后几行数据,并赋给 原始二维数组 即可
*/
// 1.先读取二维数组的第一行,根据第一行的数据,创建原始的二维数组,
int chessArr2[][]=new int[sparsArr[0][0]][sparsArr[0][1]];
// 2.在读取稀疏数组后几行数据(第二行开始),并赋给 原始二维数组 即可
for (int i= 1;i<sparsArr.length; i++){
chessArr2[sparsArr[i][0]][sparsArr[i][1]]=sparsArr[i][2];
}
//输出恢复后的二维数组
System.out.println("恢复后的二维数组");
for (int[] row:chessArr2){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
效果