package sparsearray;
public class SparseArrToTwoArray {
public static void main(String[] args) {
//创建原始二维数组11*11
int line = 11;
int list = 11;
int cherrArr[][] = new int[line][list];
//添加两个数据
cherrArr[1][2] = 5;
cherrArr[3][4] = 6;
System.out.println(cherrArr.length);
//遍历原始数组
System.out.println("原始的二维数组:");
for (int[] row : cherrArr) {
for (int data : row) {
System.out.printf("t" + data);
}
System.out.println();
}
//遍历原始数组找到原始数据的个数
int sum = 0;//用于记录多少个原始数据
for (int i = 0; i < cherrArr.length; i++) {
for (int j = 0; j < cherrArr[i].length; j++) {
if (cherrArr[i][j] != 0) {
sum++;
}
}
}
System.out.println("一共有:" + sum + "个数据");
// 根据sum创建稀疏数组sparseArr
int[][] sparseArr = new int[sum + 1][3];
//遍历稀疏数组
System.out.println("原始的稀疏数组:");
for (int[] sparserow : sparseArr) {
for (int sparsedata : sparserow) {
System.out.printf("t" + sparsedata);
}
System.out.println();
}
//遍历原始数组并将原始数组其行列及其值取出并放入原始稀疏数组中
//第一行数据
sparseArr[0][0] = line;
sparseArr[0][1] = list;
sparseArr[0][2] = sum;
int s = 0;//用于记录第几个非零数据
for (int i = 0; i < cherrArr.length; i++) {
for (int j = 0; j < cherrArr[i].length; j++) {
if (cherrArr[i][j] != 0) {
s++;
sparseArr[s][0] = i;
sparseArr[s][1] = j;
sparseArr[s][2] = cherrArr[i][j];
}
}
}
//最终的稀疏数组
System.out.println("最终的稀疏数组:");
for (int[] sparserow1 : sparseArr) {
for (int sparsedata1 : sparserow1) {
System.out.printf("t" + sparsedata1);
}
System.out.println();
}
// 读取稀疏数组第一行数据根据第一行数据初始化
int line2 = sparseArr[0][0];
int list2 = sparseArr[0][1];
int[][] cherrArr2 = new int[line2][list2];
// 打印初始数组
System.out.println("还原的初始化数组:");
for (int[] row : cherrArr2) {
for (int data : row) {
System.out.print("t" + data);
}
System.out.println();
}
// 将稀疏数组中数据取出并插入到初始数组中
for (int i = 1; i < sparseArr.length; i++) {
cherrArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 遍历还原后的数组
System.out.println("最终还原后的原始数组:");
for (int[] row : cherrArr2) {
for (int data : row) {
System.out.print("t" + data);
}
System.out.println();
}
}
}