稀疏数组的相关知识
数据结构之稀疏数组
一、存储矩阵
1.先找到需要压缩存储的矩阵的总的行数和列数。
2.然后找出非0的数据个数记作sum,创造一个二维数组行数为sum+1,列为2。
3.把需要压缩的行数和列数和sum分别存入新数组的第一行的第一列,第二列,第三列。
4.分别找出非0数的行和列和它本身的数字,分别存入新数组的每行的第一列,第二列,第三列
//创造需要存储的数组
int char1[][] = new int[11][11];
char1[1][1] = 1;
char1[5][5] = 2;
char1[6][6] = 3;
System.out.println("原始的二维数组~~");
for (int[] row : char1) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//统计非0的个数
int sum = 0;
for (int i = 0; i < char1.length; i++) {
for (int j = 0; j < char1[0].length; j++) {
if (char1[i][j] != 0) {
sum++;
}
}
}
//创造新的二维数组存储,并存储行和列数
int[][] char2 = new int[sum + 1][3];
char2[0][0] = char1.length;
char2[0][1] = char1[0].length;
char2[0][2] = sum;
//赋值给新的二位数组
int count = 0;
for (int i = 0; i < char1.length; i++) {
for (int j = 0; j < char1[0].length; j++) {
if (char1[i][j] != 0) {
count++;
char2[count][0] = i;
char2[count][1] = j;
char2[count][2] = char1[i][j];
}
}
}
二、还原矩阵
1.读取压缩的矩阵的第一行数据,然后创造新的二维数组,第一列和第二列就是二维数组的大小
2.循环读取数据,然后分别给新二维数组赋值。
//恢复数组
int char3[][] = new int[char2[0][0]][char2[0][1]];
for (int i = 1; i < char2.length; i++) {
char3[char2[i][0]][char2[i][1]] = char2[i][2];
}
System.out.println();
System.out.println("恢复后的二维数组");
for (int[] row : char3) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}


浙公网安备 33010602011771号