02稀疏数组(java版本)


 1 package com.aixuexi.contact;
 2 
 3 public class SpareArray {
 4     public static void main(String[] args) {
 5         
 6         // 创建一个原始的二维数组 11 * 11
 7         int arrchess1[][] = new int[11][11];
 8         //二维数组 赋值
 9         arrchess1[1][2] = 1;
10         arrchess1[2][3] = 2;
11         arrchess1[4][5] = 1;
12         arrchess1[8][5] = 2;
13         // 输出原始的二维数组
14         System.out.println("====原始数组==== ");
15         for(int i = 0; i < 11; i++) {
16             for(int j= 0; j < 11; j++) {
17                 System.out.printf("%d ",arrchess1[i][j]);
18             }
19             System.out.println();
20         }
21         // 将二维数组 转 稀疏数组
22         System.out.println("====稀疏数组==== ");
23         // 1)统计个数 count
24         int sum = 0; 
25         for(int i = 0; i < 11; i++) {
26             for(int j = 0; j< 11; j++) {
27                 if(arrchess1[i][j] != 0) {
28                     sum++;
29                 }
30             }
31         }
32         System.out.println("稀疏数组个数是:"+ sum);
33         // 2)创建对应的稀疏数组  、赋值
34         int sparearray[][] = new int[sum+1][3];
35         sparearray[0][0] = 11; //
36         sparearray[0][1] = 11; //
37         sparearray[0][2] = sum; //个数
38         //遍历原来的二维数组,将非0的值存放到 sparseArr中
39         int count = 0;
40         for(int i = 0; i < 11; i++) {
41             for(int j = 0; j < 11; j++) {
42                 if(arrchess1[i][j] != 0) {  //按行给稀疏数组赋值
43                     count++; //第0行已经存放数据了 从第一行开始
44                     sparearray[count][0] = i;
45                     sparearray[count][1] = j;
46                     sparearray[count][2] = arrchess1[i][j]; //注意点:--原来的-- 不要搞混
47                 }
48             }
49         }
50         // 3)打印稀疏数组
51         for(int i = 0; i < sum + 1; i++) {
52             for(int j = 0; j < 3; j++) {
53                 System.out.printf("%d\t",sparearray[i][j]);
54             }
55             System.out.println();
56         }
57         System.out.println();
58         //将稀疏数组 --》 恢复成 原始的二维数组
59         //1)1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
60         int arrchess2[][] = new int[sparearray[0][0]][sparearray[0][1]];
61         //2)2. 在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可
62         for(int i = 1; i < sparearray.length;i++) { // 注意:遍历sparearray  别弄错成 arrchess2
63             arrchess2[sparearray[i][0]] [sparearray[i][1]] = sparearray[i][2];    
64         }
65         
66         System.out.println("====恢复的稀疏数组==== ");
67         for(int i = 0; i < 11; i++) {
68             for(int j= 0; j < 11; j++) {
69                 System.out.printf("%d ",arrchess2[i][j]);
70             }
71             System.out.println();
72         }
73         
74         System.out.println("hello..");
75     }
76 }