您的位置:首页 > 其它

稀疏数组学习记录

2019-06-16 23:11 127 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Carry_bluebuff/article/details/92439516
package com.atguigu.sparsearray;

/**
* @author wststart
* @create 2019-06-14 21:27
*/
public class SparseArray {
public static void main(String[] args) {
//        创建一个原始的二维数组 11 * 11
//        0:表示没有棋子,1 表示黑子 2表示白子
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[4][5] = 2;
//        输出原始的二维数组
for (int[] ints : chessArr1) {
for (int i : ints) {
System.out.printf("%d\t", i);
}
System.out.println();
}
//        将二维数组 转成稀疏数组
//        1.先遍历二维数组 得到非0数据的个数
int sum = 0;//用来计入非0数据的个数
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if (chessArr1[i][j] != 0) {
sum++;
}
}
}
//        2.创建对应的稀疏数组
int sparseArr[][] = new int[sum + 1][3];
sparseArr[0][0] = chessArr1.length;
sparseArr[0][1] = chessArr1[0].length;
sparseArr[0][2] = sum;
//        遍历二维数组,将非9数据存放到稀疏数组中
int count = 0;//用于记录是第几个非0数据
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if (chessArr1[i][j] != 0) {
sparseArr[++count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//        输出稀疏数组
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]);
}
System.out.println();
//将稀疏数组 --》 恢复成 原始的二维数组
/*
*  1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的  chessArr2 = int [11][11]
2. 在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可.
*/

//1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组

int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];

//2. 在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可

for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}

// 输出恢复后的二维数组
System.out.println();
System.out.println("恢复后的二维数组");

for (int[] row : chessArr2) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: