01稀疏数组

Posted shanlu0000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01稀疏数组相关的知识,希望对你有一定的参考价值。

①实际需求

 技术图片

 

 

 ②稀疏数组基本介绍

  技术图片

 

 

   技术图片

 

 

   技术图片

 

 

   技术图片

 

 

   技术图片

 

 

   代码实现

 1 package DataStructures01;
 2 
 3 public class SparseArray {
 4 
 5     public static void main(String[] args) {
 6         /*1,二维数组转稀疏数组
 7          * ①遍历原始的二维数组,得到有效数据的个数sum
 8          * ②根据sum就可以创建稀疏数组,saprseArr int[sum+1][3]
 9          * ③将二维数组的有效数据存入到稀疏数组
10          */
11         
12         //①遍历原始的二维数组,创建一个原始的二维数组(11*11),0表示没有棋子,1表示黑子,2表示蓝子
13         int chessArr1[][]=new int[11][11];//创建数组
14         chessArr1[1][2]=1;//第二行第三列是一个黑子
15         chessArr1[2][3]=2;//第三行第四列是一个蓝子
16         //遍历并打印出原始的二维数组
17         System.out.println("原始的二维数组: ");
18         for(int i=0;i<chessArr1.length;i++) {
19             for(int j=0;j<chessArr1[i].length;j++) {
20                 System.out.print(chessArr1[i][j]+" ");
21             }
22             System.out.println();//每遍历一行就要换行
23         }
24         
25         //得到有效数据的个数,需要遍历打印出的这个二维数组
26         int sum=0;
27         for(int i=0;i<chessArr1.length;i++) {
28             for(int j=0;j<chessArr1[i].length;j++) {
29                 if(chessArr1[i][j]!=0) {
30                     sum++;
31                 }
32             }
33         }
34         System.out.println("有效数据的个数是:" +sum);
35         
36         //②根据sum创建稀疏数组
37         int sparseArr[][]=new int[sum+1][3];
38         sparseArr[0][0]=11;//给稀疏数组赋值
39         sparseArr[0][1]=11;
40         sparseArr[0][2]=sum;
41         //遍历并打印出创建的稀疏数组
42         System.out.println("创建的稀疏数组:");
43         for(int i=0;i<sparseArr.length;i++) {
44             for(int j=0;j<sparseArr[i].length;j++) {
45                 System.out.print(sparseArr[i][j]+"  ");
46             }
47             System.out.println();
48         }
49         //遍历原始的二维数组chessArr1,把有效数据存入到稀疏数组中sparseArr
50         int count=0;//用一个计数器,记录当前遍历到第几个非0数据
51         for(int i=0;i<chessArr1.length;i++) {
52             for(int j=0;j<chessArr1[i].length;j++) {
53                 if(chessArr1[i][j] !=0) {
54                     count++;
55                     sparseArr[count][0]=i;
56                     sparseArr[count][1]=j;
57                     sparseArr[count][2]=chessArr1[i][j];
58                 }
59             }
60         }
61         //遍历并打印出赋过值之后的稀疏数组
62         System.out.println("赋值之后的稀疏数组: ");
63         for(int i=0;i<sparseArr.length;i++) {
64             for(int j=0;j<sparseArr[i].length;j++) {
65                 System.out.print(sparseArr[i][j]+" ");
66             }
67             System.out.println();
68         }
69         
70         
71         /*2,稀疏数组转原始的二维数组
72          * ①先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组chessArr2[][]=int[11][11]
73          * ②再读取稀疏数组的后几行数据,并赋值给原始的二维数组即可
74          */
75         
76         //①读取稀疏数组第一行数据,并赋值给创建出的原始的二维数组chessArr2[][]
77         int chessArr2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];//11*11
78         for(int i=1;i<sparseArr.length;i++) {
79             chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
80         }
81         
82         //遍历打印出chessArr2,看是否恢复原始数据
83         System.out.println("观察chessArr2是否从稀疏数组中恢复数据:");
84         for(int i=0;i<chessArr2.length;i++) {
85             for(int j=0;j<chessArr2[i].length;j++) {
86                 System.out.print(chessArr2[i][j]+" ");
87             }
88             System.out.println();
89         }
90     }
91 
92 }

控制台打印结果:

原始的二维数组: 
0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 2 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
有效数据的个数是:2
创建的稀疏数组:
11  11  2  
0  0  0  
0  0  0  
赋值之后的稀疏数组: 
11 11 2 
1 2 1 
2 3 2 
观察chessArr2是否从稀疏数组中恢复数据:
0 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 
0 0 0 2 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 

 

以上是关于01稀疏数组的主要内容,如果未能解决你的问题,请参考以下文章

JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

数据结构01-稀疏数组

尚硅谷算法与数据结构学习笔记01 -- 稀疏数组和队列

稀疏数组本地读写版代码实现

JAVA描述算法和结构(01):稀疏数组和二维数组转换

数据结构 -- 稀疏数组本地读写版代码实现