当前位置: 首页 > 科技观察

Java编程内功——数据结构与算法《稀疏数组》_0

时间:2023-03-20 00:57:04 科技观察

基本介绍当一个数组中的大部分元素都是0,或者相同值的数组时,可以使用稀疏数组来保存数组。稀疏数组的处理方法是:记录数组有多少行多少列,有多少不同的值。将具有不同值的元素的行和列记录在一个小规模的数组中,从而减少程序的大小。举一个原始二维数组的例子。转换后的二维数组第一行记录原数组。多少行多少列,多少个值(8<<代表原数组22、15、11、17、-6、39、91、28>>)转换后的二维数组二维数组转稀疏数组思路遍历原二维数组得到有效数据的个数sum根据求和可以创建一个稀疏数组sparseArrint(sum+1)(3)存储有效数据的有效数据two-dimensionalarrayintothesparsearray将稀疏数组转换为原始二维数组思路是先读取稀疏数组的第一行,根据第一行的数据创建原始二维数组,然后读取稀疏数组最后几行的数据,赋值给原来的二维数组。应用示例使用sparseArray,像之前的二维数组(chessboard\map)等一样保存稀疏数组,还原原二维数组代码案例包com.structures.sparsarray;publicclassSparseArray{publicstaticvoidmain(String[]args){//创建一个原始二维数组11*11//0:表示没有棋子,1表示黑子,2表示白子int[][]chessArr1=newint[11][11];chessArr1[1][2]=1;chessArr1[2][3]=2;//输出原始二维数组System.out.println("原始二维数组");for(int[]ints:chessArr1){for(intanInt:ints){System.out.printf("%d\t",anInt);}System.out.println();}//转换二维数组到稀疏数组//1。先遍历二维数组得到非零数据Number.intsum=0;for(int[]ints:chessArr1){for(intanInt:ints){if(anInt!=0){sum++;}}}系统.out.println("sum="+sum);//2.创建对应的稀疏数组int[][]sparseArr=newint[sum+1][3];//将sparseArr[0][0]=11赋给稀疏数组;sparseArr[0][1]=11;sparseArr[0][2]=sum;//遍历原数组,将非零值存入稀疏数组intcount=0;//count用于记录非0数据的数量for(inti=0;i