public class SparseArray {
public static void main(String[] args) {
//创建一个原始的二维数组 11*11 其中 0:表示不存数据 1 2 表示存在数据
int[][] arr = new int[11][11];
//给原始数组赋初始值
arr[1][2] = 1;
arr[2][3] = 2;
arr[5][6] = 2;
//定义sum记录原始数组中数据的个数
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length ; j++) {
if(arr[i][j] != 0){
sum ++;
}
System.out.print(arr[i][j] +" ");
}
System.out.println();
}
System.out.println("转为稀疏数组");
//定义稀疏数组
int [][]sparseArray = new int[sum+1][3];
//初始化记录原始数组行数 列数 以及所有有效数据的个数
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//遍历二维数组将非零值存储到稀疏数组当中
//count记录当前有效数据
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[0].length ; j++) {
if(arr[i][j] != 0){
count++;
/*
* 每一行的第一列:记录位于第几行
* 每一行的第二列:记录位于第几列
* 每一行的第三列:记录数据值
* */
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = arr[i][j];
}
}
}
System.out.println("转换后的稀疏数组是");
for (int i = 0; i < sparseArray.length; i++) {
for (int j = 0; j < sparseArray[0].length ; j++) {
System.out.print(sparseArray[i][j] + " ");
}
System.out.println();
}
// 将稀疏数组转为原始数组
System.out.println("转换为原始数组");
System.out.println();
//初始化原始数组
int [][] chessArr2 = new int[sparseArray[0][0]][sparseArray[0][1]];
//给原始数组进行赋值
for (int i = 1; i < sparseArray.length; i++) {
int row = sparseArray[i][0];
int col = sparseArray[i][1];
int value = sparseArray[i][2];
chessArr2[row][col] = value;
}
for(int [] row:chessArr2){
for(int data:row){
System.out.print(data +" ");
}
System.out.println();
}
}
}
普通数组与稀疏数组间的转换
最新推荐文章于 2024-11-04 13:52:23 发布