package com.atguigu.sparsearray;
public class SparseArry {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个原始的二维数组11*11
//0表示没有棋子,1表示黑子 2表示篮子
int chessArr1[][] = new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
//输出原始的二维数组
//原始的二维数组
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1[i].length;j++){
System.out.print(chessArr1[i][j]+" ");
}
System.out.println();
}
//将二维数组 转 稀疏数组
/*
* 1.先遍历二维数组 得到非零的个数
*
* */
int sum = 0;
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1[i].length;j++){
if(chessArr1[i][j] !=0){
sum++;
}
}
}
//创建对应的稀疏数组
int spareArr[][]=new int[sum+1][3];
//给稀疏数组赋值
spareArr[0][0]=11;
spareArr[0][1]=11;
spareArr[0][2]=sum;
//遍历二维数组,将非0的值存放到 spareAee中
int count =0;
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1[i].length;j++){
if(chessArr1[i][j] !=0){
count++;
spareArr[count][0]= i;
spareArr[count][1]= j;
spareArr[count][2]=chessArr1[i][j];
}
}
}
//输出稀疏数组
for(int i=0;i<spareArr.length;i++){
for(int j=0;j<spareArr[i].length;j++){
System.out.print(spareArr[i][j]+" ");
}
System.out.println();
}
//将稀疏数组恢复成原始的二维数组
/*
* 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的数组
* */
int chessArr2[][]=new int [spareArr[0][0]][spareArr[0][1]];
for(int i=1;i<spareArr.length;i++){
chessArr2[spareArr[i][0]][spareArr[i][1]]=spareArr[i][2];
}
//输出恢复后的二维数组
System.out.println("输出恢复后的二维数组");
for(int i=0;i<chessArr2.length;i++){
for(int j=0;j<chessArr2[i].length;j++){
System.out.print(chessArr2[i][j]+" ");
}
System.out.println();
}
}
}
稀疏数组的代码实现
最新推荐文章于 2022-08-15 16:47:14 发布