H__D  

一、稀疏数组介绍

  当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。  

  稀疏数组的处理方法:

  1、记录数组 一共有几行几列,有多少个不同的值

  2、把具有不同值的原元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

二、图示稀疏数组

  

三、Java实现稀疏矩阵存储及读取

  下面的代码讲解了利用 稀疏矩阵 储存 三种棋子及棋盘,以及从 稀疏矩阵 中还原 原数据

 1 package point2;
 2 
 3 /*
 4     使用稀疏矩阵来保存二维数组,并且用稀疏矩阵恢复原二维数组。
 5  */
 6 public class SparseArray {
 7     public static void main(String[] args) {
 8         // 创建一个原始的二维数组 11*11
 9         // 0:表示没有棋子,1:表示黑子,2:表示蓝子
10         int chessArr1[][] = new int[11][11];
11         chessArr1[1][2] = 1;
12         chessArr1[2][3] = 2;
13         chessArr1[4][5] = 2;
14 
15         // 输出原始的二维数组
16         System.out.println("原始的二维数组为:");
17         for (int[] row : chessArr1){
18             for (int data : row){
19                 System.out.printf("%d\t",data);
20             }
21             System.out.println();
22         }
23 
24         // 将二维数组转稀疏数组的思想
25         // 1、先遍历二维数组得到非0数据的个数
26         int sum = 0;
27         for (int i = 0; i < 11; i++) {
28             for (int j = 0; j < 11; j++) {
29                 if (chessArr1[i][j] != 0){
30                     sum++;
31                 }
32             }
33         }
34 
35         // 2、创建对应的稀疏数组
36         int sparseArr[][] = new int[sum + 1][3];
37         // 给稀疏数组赋值
38         sparseArr[0][0] = 11;
39         sparseArr[0][1] = 11;
40         sparseArr[0][2] = sum;
41         // 遍历二维数组,将非0的值存放到sparseArr中
42         int count = 0; //count用于记录第几个非0数据
43         for (int i = 0; i < 11; i++) {
44             for (int j = 0; j < 11; j++) {
45                 if (chessArr1[i][j] != 0){
46                     count++;
47                     sparseArr[count][0] = i;
48                     sparseArr[count][1] = j;
49                     sparseArr[count][2] = chessArr1[i][j];
50                 }
51             }
52         }
53 
54         // 输出稀疏数组
55         System.out.println();
56         System.out.println("得到稀疏数组为:");
57         for (int i = 0; i < sparseArr.length; i++) {
58             System.out.printf("%d\t%d\t%d\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
59         }
60 
61         // 将稀疏数组恢复成原始的二维数组
62         /*
63             1、先读取稀疏数组的第一行,根据第一行创建原始的二维数组
64             2、在读取稀疏数组后几行数据,并赋值给原来的二维数组
65          */
66 
67         // 1、根据稀疏数组第一行,创建原始数组
68         int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
69 
70         // 2、根据稀疏数组的其他行,恢复数组
71         for (int i = 1; i < sparseArr.length; i++) {
72             chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
73         }
74 
75         // 输出恢复后的数组
76         System.out.println();
77         System.out.println("恢复后的二维数组为:");
78 
79         for (int[] row : chessArr2){
80             for (int data : row){
81                 System.out.printf("%d\t",data);
82             }
83             System.out.println();
84         }
85      }
86 }

 

原文链接:https://blog.csdn.net/a1786742005/article/details/103759534

posted on 2021-03-17 02:04  H__D  阅读(87)  评论(0编辑  收藏  举报