稀疏数组

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

2.处理方法

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

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

3.需求应用

 1 package Study;
 2 
 3 public class XiShuShuZu {
 4     
 5     public static void main(String[] args){
 6         int chessArr1[][]=new int[11][11];
 7         chessArr1[1][2]=1;
 8         chessArr1[2][3]=2;
 9         
10         System.out.println("原二维数组:");
11         for(int[] row:chessArr1){
12             for(int data:row){
13                 System.out.printf("%d\t",data);
14             }
15             
16             System.out.println();
17         }
18         
19         //System.out.println("行:"+chessArr1.length+"      列:"+chessArr1[0].length);//获取一个二维数组的行与列
20         
21         
22         
23         //将二维数组转成稀疏数组
24         int sum=0;
25         for(int i=0;i<chessArr1.length;i++){
26             for(int j=0;j<chessArr1[0].length;j++){
27                 if(chessArr1[i][j]!=0){
28                     sum++;
29                 }
30             }
31         }
32         
33         //创建稀疏数组
34          int sparseArr[][]=new int[sum+1][3];
35          
36          //赋值
37          
38          //第一行
39          sparseArr[0][0]=chessArr1.length; //原二维数组的行数
40          sparseArr[0][1]=chessArr1[0].length;//原二维数组的列数
41          sparseArr[0][2]=sum;//原二维数组的元素个数
42          int k=0;
43          //遍历二维数组,将非0的值存放到稀疏数组中
44          for(int i=0;i<chessArr1.length;i++){
45              for(int j=0;j<chessArr1[0].length;j++){
46                  if(chessArr1[i][j]!=0){
47                      k++;
48                      sparseArr[k][0]=i;
49                      sparseArr[k][1]=j;
50                      sparseArr[k][2]=chessArr1[i][j];
51                      
52                      
53                      
54                  }
55              }
56          }
57          System.out.println("------------------------------------------------------------------");
58          //打印
59          System.out.println("转换成的稀疏数组:");
60          for(int[] row:sparseArr){
61              for(int data:row){
62                  System.out.printf("%d\t", data);
63              }
64              System.out.println();
65          }
66          
67          
68          //将稀疏数组恢复成原二维数组
69          int chessRow=sparseArr[0][0];
70          int chessLine=sparseArr[0][1];
71          int newChessArry[][]=new int[chessRow][chessLine];
72          for(int i=1;i<sparseArr.length;i++){
73              for(int j=0;j<sparseArr[0].length;j++){
74                  newChessArry[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
75              }
76          }
77          System.out.println("------------------------------------------------------------------");
78          
79          //打印恢复后的数组
80          
81          System.out.println("恢复为原二维数组:");
82          for(int[] row: newChessArry){
83              for(int data:row){
84                  System.out.printf("%d\t", data);
85              }
86              System.out.println();
87          }
88     
89     
90     }
91 
92 }

运行结果:

posted @ 2021-02-02 11:49  L1998  阅读(83)  评论(0)    收藏  举报