二维数组 转 稀疏数组的思路
1、遍历原始的二维数组,得到有效数据的个数 sum
2、根据sum就可以创建 稀疏数组 sparseArr int[sum + 1][3]
3、将二维数组的有效数据存入到 稀疏数组
稀疏数组 转 原始的二维数组的思路
1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的 chessArr2 = int[11][11]
2、在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可;
原始数组
稀疏数组
过程如下:
首先我们建立一个原始数组:
public class Text1 {
public static void main(String[] args) {
//创建原始数组
int[][] ss = new int[11][11];
ss[1][2] = 1;
ss[2][3] = 2;
//遍历数组
for(int i = 0; i < 11;i++)
{
for(int j = 0;j < 11;j++)
{
System.out.print(ss[i][j]);
System.out.print(" ");
}
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 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 0
将原始数组转换为稀疏数组的代码如下:
int sum = 0;//记录有几个有效数据
for(int i = 0; i < 11;i++)
{
for(int j = 0;j < 10;j++)
{
if(spareArr[i][j] != 0)
{
sum++;
}
}
}
int count = 1;//对每一个有效数据换行记录
int[][] chessArr = new int[sum + 1][3];
chessArr[0][0] = 11;
chessArr[0][1] = 11;
chessArr[0][2] = sum;
for(int i = 0; i < 11;i++)
{
for(int j = 0;j < 10;j++)
{
if(spareArr[i][j] != 0)
{
chessArr[count][0] = i;
chessArr[count][1] = j;
chessArr[count][2] = spareArr[i][j];
count++;
}
}
}
//遍历稀疏数组查看是否正确
for(int[] i : chessArr)
{
for(int data : i)
{
System.out.print(data + " ");
}
System.out.println();
}
转换后的稀疏数组如下:
11 11 2
1 2 1
2 3 2
将上述稀疏数组转化为原始数组:
int[][] spareArr2 = new int[chessArr[0][0]][chessArr[0][1]];
int Hang = 0,Lie = 0;
for(int i = 1; i < sum+1;i++)
{
Hang = chessArr[i][0];
Lie = chessArr[i][1];
spareArr2[Hang][Lie] = chessArr[i][2];
}