package data.struct;
import org.junit.Test;
/*
* A.稀疏数组
* ---------
* 0 0 0 0 0
* 0 1 0 8 0
* 5 0 0 0 9
* 0 7 0 0 0
* ---------
* 创建原始数组有效值稀疏数组
* 第一行信息为原始数组size(rows) size(cols) val
* 再记录有效值对应的行、列、值
* ---------
* r c v
* 0 4 5 5
* 1 1 1 1
* 2 1 4 8
* 3 2 0 5
* 4 2 4 9
* 5 3 1 7
* ---------
* */
public class SparseArray {
@Test
public void sparseArray() {
//1.创建原始数组,并构建数据
int originalArray[][] = new int[4][5];
originalArray[1][1] = 1;
originalArray[1][4] = 8;
originalArray[2][0] = 5;
originalArray[2][4] = 9;
originalArray[3][1] = 7;
for(int i=0; i<originalArray.length; i++) {
for(int j=0; j<originalArray[i].length; j++) {
System.out.print(originalArray[i][j] + "\t");
}
System.out.println();
}
//2.获取有效数字个数
int count = 0;
for(int i=0; i<originalArray.length; i++) {
for(int j=0; j<originalArray[i].length; j++) {
if(originalArray[i][j] != 0) {
count++;
}
}
}
System.out.printf("有效数字有%d个", count);
System.out.println();
//3.创建稀疏数组,第一行信息为原始数组size(rows) size(cols) val
int sparseArray[][] = new int[count+1][3];
sparseArray[0][0] = originalArray.length;
sparseArray[0][1] = originalArray[0].length;
sparseArray[0][2] = count;
//4.遍历原始数组并将有效值,r,c,v添加至稀疏数组
int sparseArrayRow = 1;
for(int i=0; i<originalArray.length; i++) {
for(int j=0; j<originalArray[i].length; j++) {
if(originalArray[i][j] != 0) {
sparseArray[sparseArrayRow][0] = i;
sparseArray[sparseArrayRow][1] = j;
sparseArray[sparseArrayRow][2] = originalArray[i][j];
sparseArrayRow ++;
}
}
}
//5.查看稀疏数组结果
for(int ii=0; ii<sparseArray.length; ii++) {
for(int jj=0; jj<sparseArray[ii].length; jj++) {
System.out.print(sparseArray[ii][jj] + "\t");
}
System.out.println();
}
}
}