举例
稀疏数组第一行是原数据几行几列和几个有效数据的个数
下面的行是各个有效数组的行列与具体值
稀疏数组实现
代码实现
package DataStructures.sparsearray;/*** 二维数组转稀疏数组 与 稀疏数组转成二维数组*/
public class SparseArray {public static void main(String []args){//创建一个原始二维数组11*11//0:表示没有棋子,1:表示黑色棋子 , 2:表示蓝色棋子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 2;//输出一下原数组for (int[] row : chessArr1){for (int data : row){System.out.printf("%d\t",data);}System.out.println();/*** 结果:* 0 0 0 0 0 0 0 0 0 0 0* 0 0 1 0 0 0 0 0 0 0 0* 0 0 0 2 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 2 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0*/}//将二维数组 转 稀疏数组的思路//1.先遍历二维数组,得到非0数据的个数int sum = 0;for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {sum++;}}}// System.out.println(sum); //2//2.创建对应的稀疏数组int sparseArr[][] = new int[sum+1][3];//给稀疏数组第一行数据sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;//把非0值存放到稀疏数组中int count = 0; //用于记录是第几个非0数据for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//输出稀疏数组的形式System.out.println();System.out.println("得到的洗漱数组~~~~~~~~~~~");for (int i = 0; i<sparseArr.length;i++){for (int j = 0; j<sparseArr[0].length; j++){System.out.print(sparseArr[i][j]+"\t");}System.out.println();/*** 结果:* 得到的洗漱数组~~~~~~~~~~~* 11 11 3* 1 2 1* 2 3 2* 4 5 2*/}//将稀疏数组 --》 恢复成 原始的 二维数组/*** 1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组* 2.再读取稀疏数组后几行的数据,并赋给 原始二维数组 即可。*/// 1.想读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];//遍历稀疏数组 ,从稀疏数组的第二行开始for (int i = 1; i<sparseArr.length;i++){chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];}//输出恢复后的稀疏数组for (int i = 0; i<chessArr2.length;i++){for (int j = 0; j<chessArr2[0].length; j++){System.out.print(chessArr2[i][j]+"\t");}System.out.println();/*** 结果:* 0 0 0 0 0 0 0 0 0 0 0* 0 0 1 0 0 0 0 0 0 0 0* 0 0 0 2 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 2 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0* 0 0 0 0 0 0 0 0 0 0 0*/}}
}