稀疏数组
- 基础知识
稀疏数组sparseArray:一个数组中大部分元素为0或为同一个值,可用稀疏数组存储,节省存储空间;(应用:棋盘的存盘,续盘)
存储结构
行(row)列(col)值(val)
【0】
【1】
【2】
实例:
000000 3 6 2 3表示二维数组行数,6表示列数 ,2表示有效值个数
001000 -------> 2 3 1 2表示二行,3表示第三列,1表示值为1
000200 3 4 2
二维数组 稀疏数组
转换思路:
遍历二维数组,得到有效数据的个数sum
得到稀疏数组int【sum+1】【3】
将二维数组的有效数据存入稀疏数组
- 代码实现
(代码的实现以11行11列的二维数组为例)
public class demo{
public static void main (String[] args){
/*定义一个11行11列的二维数组
0代表没有数据(数组未赋值时默认为0)
*/
int[][] array=new int[11][11];
array[2][3]=58;
array[3][4]=32;
//遍历二维数组并输出
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
System.out.print(array[i][j]+"\t");
}
System.out.println();
}
//转化为稀疏数组
int sum=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(array[i][j]!=0){
sum++;
}
}
}//算出二维数组中的有效值的个数
int[][] sparseArr=new int[sum+1][3];//创建稀疏数组
//定义稀疏数组的第一行,存储二维数组的列数行数和有效数据的值;
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//向稀疏数组中存值;
int count=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(array[i][j]!=0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=array[i][j];
}
}
}
//输出稀疏数组;
for(int i=0;i<sparseArr.length;i++){
for(int j=0;j<3;j++){
System.out.print(sparseArr[i][j]+"\t");
}
System.out.println();
}
}
}
-
实现结果
二维数组的输出
稀疏数组的输出