数据结构与算法-java-稀疏数组
那么首先明白什么是稀疏数组
稀疏数组只有在数据稀疏的时候才会有优势,而它的特点就是永远是三列,数据行的话是数据个数+1,因为用第一行记录原本的几行几列和多少个数
那么我们用接下来这个案例演示一下
public class SparseArray { public static void main(String[] args) { int chessArr1[][] = new int [11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; for (int[]row:chessArr1) { for(int data :row) { System.out.printf("%d\t", data);//printf主要是继承了C语言的printf的一些特性,可以进行格式化输出 } System.out.println();//这里是为了换行,不然打印出来就是全在一行里面 } //将二维数组转稀疏数组 //先得到非0数据个数 int sum =0 ; for(int i=0;i<11;i++) { for(int j=0;j<11;j++) { if (chessArr1[i][j] != 0) { sum++; } } } //2.创建稀疏数组 int sparseArr[][]=new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0]=11; sparseArr[0][1]=11; sparseArr[0][2]=sum; //遍历二维数组,将非零的数据存放到稀疏数组中 int count=0; for (int i = 0; i <11 ; i++) { for (int j=0;j<11;j++){ if (chessArr1[i][j]!=0){ count++; sparseArr[count][0]=i; //有数据时进入if然后数据的行放入稀疏数组 sparseArr[count][1]=j; //将对应有数值的列放入稀疏数组 sparseArr[count][2]=chessArr1[i][j]; //值本身 } } } System.out.println(); System.out.println("得到的稀疏数组"); for (int i = 0; i <sparseArr.length ; i++) { System.out.printf("%d\t%d\t%d\t",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); System.out.println(); } //将稀疏数组恢复到二维数组 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]; } //输出恢复后的二维数组 System.out.println(); System.out.println("恢复后的二维数组"); for (int[] row:chessArr2){ for (int data:row){ System.out.printf("%d\t",data); } System.out.println(); } } }