Java学习——数据结构之稀疏数组
作者:互联网
稀疏数组
二维数组的很多默认值为0或者同一个值时,使用稀疏数组来保存数据。
处理思路
1.将 二维数组 转换为 稀疏数
-
遍历原始的二维数组,得到有效数据的个数sum (这里的有效数据是指和默认值不同的数值)
-
根据sum创建稀疏数组sparseArr
-
将二维数组的有效数据存入稀疏数组
2.将稀疏数组转换为原始的二维数组
-
先读取稀疏数组的第一行,根据第一行的数据创建原始的二维数组
-
再读取稀疏数组第二行及之后的数据并赋值给原始的二维数组
代码实现
/* 稀疏数组的存储: 行数 列数 值 第一行 原始数组的行数 原始数组的列数 原始数组中有效数据的个数n 第二行 第一个有效数据的行数 第一个有效数据的列数 第一个有效数据的值 ······ 第n+1行 第n个有效数据的行数 第n个有效数据的列数 第n个有效数据的值 */ public static void main(String[] args) { //创建原始二维数组 将原始二维数组进行赋值 int[][] oldArry = new int[11][13]; //创建时数组会有默认值为0 oldArry[5][6]=1; oldArry[8][9]=1; //打印原始的二维数组 System.out.println("原始二维数组如下:"); for (int i=0;i<oldArry.length;i++) { for (int j = 0; j < oldArry[0].length; j++) System.out.printf(oldArry[i][j] + "\t"); System.out.println(); } System.out.println("---------------------------------"); //将原始二维数组转换为稀疏数组 int sum=0; //记录原始二维数组有效值的个数 for (int i=0;i<oldArry.length;i++) for (int j = 0; j < oldArry[0].length; j++) if(oldArry[i][j]!=0) sum++; //根据sum的值创建稀疏数组 int[][] sparseArr = new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0] =oldArry.length; //原始数组的行数 sparseArr[0][1] =oldArry[0].length;//原始数组的列数 sparseArr[0][2] =sum; //原始数组中有效数据的个数 //遍历原始二维数组,将有效数据的行、列、数值信息进行保存 for (int i=0;i<oldArry.length;i++) for (int j = 0; j < oldArry[0].length; j++) if(oldArry[i][j]!=0) { //从稀疏数组的最后一行往第二行存储 sparseArr[sum][0]=i; sparseArr[sum][1]=j; sparseArr[sum][2]=oldArry[i][j]; sum--; } //打印稀疏数组的值 System.out.println("转换后的稀疏数组如下:"); for (int i=0;i<sparseArr.length;i++){ for (int j = 0; j < sparseArr[0].length; j++) System.out.printf(sparseArr[i][j]+"\t"); System.out.println(); } System.out.println("---------------------------------"); //将稀疏数组转换为原始二维数组 //根据稀疏数组的第一行的数据获取原始二维数组的行列值 int [][] newArry = new int[sparseArr[0][0]][sparseArr[0][1]]; //对转换的二维数组赋值 for(int i=1;i<sparseArr.length;i++) { newArry[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; } //打印转换后的原始数组 System.out.println("转换后的原始数组如下:"); for (int i=0;i<newArry.length;i++){ for (int j = 0; j < newArry[0].length; j++) System.out.printf(newArry[i][j]+"\t"); System.out.println(); } }
标签:Java,稀疏,有效,二维,原始,数组,数据结构,数据 来源: https://www.cnblogs.com/xjl181016/p/15619638.html