package com.DataStrucTruesStudy.DataStructures;
public class SparseArray {
public static void main(String[] args) {
// 创建数组
int chessArr11[][] = new int[11][11];
chessArr11[1][2] = 1;
chessArr11[2][3] = 2;
// 输出二维数组
System.out.println("输出二维数组:");
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
System.out.print(chessArr11[i][j] + "\t");
}
System.out.println("");
}
// 将二维数组转成稀疏数组
// 1 首先遍历二维数组 得到非0数据的个数
// 稀疏数组 要有的要素有 行数列数 元素数 非零原始是第几行第几列
int loop = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr11[i][j] != 0) {
loop++;
}
}
}
System.out.println("非零数据有" + loop + "个.");
// 2 创建稀疏数组
int sparseArr[][] = new int[loop + 1][3];
// 然后给稀疏数组赋值
// 稀疏数组 的组成是
// 行 列 值
// 11 11 2 这行代表11行11列 2个值
// 1 2 1
// 2 3 2
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = loop;
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr11[i][j] != 0) {
count++;//每个非零的数都另起一行了
sparseArr[count][2] = chessArr11[i][j];
sparseArr[count][0] = i;
sparseArr[count][1] = j;
}
}
}
System.out.println("-------------------------------" + '\n' + "稀疏矩阵为:");
System.out.println("行" + '\t' + "列" + '\t' + "值");
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr.length; j++) {
System.out.print(sparseArr[i][j] + "\t");
}
System.out.println("");
}
// 反之将稀疏数组恢复成二维数组的练习 个人思路
// 根据以上
// 11 11 2
// 1 2 1
// 2 3 2
// 第一步先做一个二维数组,再把值赋上
int chessArr22[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i <= sparseArr.length - 1;i ++ ){
chessArr22[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
// 遍历二维数组
System.out.println("---------------------------" + '\n' + "转换成的二维数组是 :");
for (int i = 0; i < chessArr22.length; i++) {
for (int j = 0; j < chessArr22[i].length; j++) {
System.out.print(chessArr22[i][j] + "\t");
}
System.out.println("");
}
}
}
稀疏数组和二维数组之间的转换代码实现+笔记
最新推荐文章于 2024-09-12 23:00:00 发布