目录
目录
处理:
简介:
稀疏数组用于存放数组中大量含有0元素的情况
处理:
1.记录数组一共有几行几列,有多少个不同的值
2.把具有不同的值的元素的行和列记录在一个小规模的数组中,从而减小程序的规模
二维数组和稀疏数组的转化
1.创建二维数组并初始化
//创建一个原始的二维数组11*11
//0:没有棋子 1:黑子 2:蓝子
int chessArr1[][]=new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
System.out.println("原始的二维数组");
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1.length;j++){
System.out.print(chessArr1[i][j]+" ");
}
System.out.println();
}
2.转化
int sum=0;
for(int i=0;i< chessArr1.length;i++){
for(int j=0;j<chessArr1.length;j++){
if(chessArr1[i][j]!=0){
sum++;
}
}
}
//创建稀疏数组
int sparseArr[][]=new int[sum+1][3];
//赋值
sparseArr[0][0]=11;//行
sparseArr[0][1]=11;//列
sparseArr[0][2]=sum; //元素个数
//遍历二维数组将非零的值存放到稀疏数组中
int cnt=0;
for(int i=0;i< chessArr1.length;i++){
for(int j=0;j< chessArr1.length;j++){
if (chessArr1[i][j]!=0){
cnt++;
sparseArr[cnt][0]=i;
sparseArr[cnt][1]=j;
sparseArr[cnt][2]=chessArr1[i][j];
}
}
}
//输出稀疏数组
System.out.println("得到的稀疏数组为~");
for(int i=0;i<sparseArr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
sum为了得到原先二维数组中有几个非零元素
得到的稀疏数组如下
11 | 11 | 2 |
1 | 2 | 1 |
2 | 3 | 2 |
3.恢复二维数组
//将稀疏数组恢复成原来的二维数组
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("恢复后的二维数组~");
for(int i=0;i<chessArr2.length;i++){
for(int j=0;j<chessArr2.length;j++){
System.out.print(chessArr2[i][j]+" ");
}
System.out.println();
}