保健品网站建设方案书模板,电子商务网站建设课设网站模板,成都网站开发培训多少钱,深圳有哪些招聘网站博文主要是自己学习的笔记#xff0c;供自己以后复习使用#xff0c; 参考的主要教程是B站的 尚硅谷数据结构和算法
稀疏数组(sparse array)
实际需求#xff1a;五子棋程序中的存盘退出和续上盘的功能 问题分析#xff1a;
如果直接用二维数组#xff0c;很多值是默认…博文主要是自己学习的笔记供自己以后复习使用 参考的主要教程是B站的 尚硅谷数据结构和算法
稀疏数组(sparse array)
实际需求五子棋程序中的存盘退出和续上盘的功能 问题分析
如果直接用二维数组很多值是默认值0, 因此记录了很多没有意义的数据.-稀疏数组。 存盘二维数组–稀疏数组来–持久化到磁盘中 续盘将磁盘中的内容导入–稀疏数组–恢复二维数组
稀疏数组
当一个数组中大部分元素为或者为同一个值的数组时可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
记录数组一共有几行几列有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中从而缩小程序的规模
举例 第0行存储该二维数组有几行几列几个非空值 其余的行一次存储非空值的位置和值的大小
JAVA实现
public class SparseArray {public static void main(String[] args) {//创建一个原始的二维数组11*11//0表示没有棋子1:表示有棋子int chessArr1[][] new int[11][11];chessArr1[1][2] 1;chessArr1[2][3] 2;chessArr1[4][5] 3;//输出原始的二维数组System.out.println(原始的二维数组~~~~~~~~~~~~~~~~);for(int[] row :chessArr1){for(int data: row){System.out.printf(%d\t, data);}System.out.println();}//将二维数组转为稀疏数组的思想//1、先遍历二维数组 得到非0数据的个数int sum 0;for (int i 0; i 11; i) {for (int j 0; j 11; j) {if (chessArr1[i][j] ! 0) {sum;}}}//2.创建对应的稀疏数组int sparseArr[][] new int[sum 1][3];//给稀疏数组赋值sparseArr[0][0] 11;sparseArr[0][1] 11;sparseArr[0][2] sum;int count 0;for (int i 0; i 11; i) {for (int j 0; j 11; j) {if(chessArr1[i][j] ! 0) {count;sparseArr[count][0] i;sparseArr[count][1] j;sparseArr[count][2] chessArr1[i][j];}}}//输出稀疏数组的形式System.out.println();System.out.println(输出的稀疏数组为~~~~~~~~~~~~~~~~);for(int i 0; i sparseArr.length; i) {System.out.printf(%d\t%d\t%d\t,sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);System.out.println();}//恢复成原始数组//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(恢复的二维数组~~~~~~~~~~~~~~~~);for(int[] row :chessArr2){for(int data: row){System.out.printf(%d\t, data);}System.out.println();}}
}
结果如下