数组:稀疏数组

  • Post author:
  • Post category:其他



一、为什么要用使用稀疏数组

在一些二维数组中,因为很多值都是默认值0或者是同一个值时候,我们存储导致存储了很多无用的数据。例如五子棋盘:


黑子棋子用1表示,蓝色棋子用2表示,这样子我们可以得到得到一个11*11的二维数组。

但是数组中大部分的元素为0,这样我们的二维数组中就保存了很多无用的数据,这个时候为了能节省空间,可以使用稀疏数组。


二、二维数组转稀疏数组的思路

1、[0]下标一个元素代表的是二维数组有11行,第二个元素代表是二维数组有11列,第三次个元素代表的是值得个数(例:棋盘的棋子代表值,有多少个棋子则有多少个值)

2、除了[0]下标以外,其它的下标代表值(棋子)的位置。例:[1]代表在二维数组[1][2]位置,值为1;[2]代表在二维数组[2][3]位置,值为2;



综上所述:这样子我们就将一个11*11的二维数组变成了一个3*3的稀疏数组,大大节省了空间。

三、代码的实现


二维数组转稀疏数组:

public class Test04 {
    public static void main(String[] args) {
        //创建一个11*11的棋盘
        int demo[][] = new int[11][11];
        //在棋盘放入两个棋子。1-黑子、2-蓝子
        demo[1][2] = 1;
        demo[2][3] = 2;

        //将二维数组转为稀疏数组
        //第一步,遍历数组找到数值个数(棋子个数)
        int count = 0; //count用来记录数值个数(棋子个数)
        for (int i = 0; i < demo.length; i++) {
            for (int j = 0; j < demo[0].length; j++) {
                if (demo[i][j] != 0) {
                    count++;
                }
            }
        }
        //创建稀疏数组
        int demo2[][] =new int[count+1][3];
        //初始化[0]
        demo2[0][0]=demo.length;
        demo2[0][1]=demo[0].length;
        demo2[0][2]=count;

        //遍历二维数组,将值的位置放入稀疏数组
        int count1 =1;//记录数据时放第几个,因为[0]已经放了行列个数,所以这个为1
        for (int i = 0; i < demo.length; i++) {
            for (int j = 0; j < demo[i].length; j++) {
                if (demo[i][j] != 0) {
                    demo2[count1][0]=i;
                    demo2[count1][1]=j;
                    demo2[count1][2]=demo[i][j];
                    count1++;
                }
            }
        }
        for (int[] a:demo2) {
            System.out.print(a[0]+"---");
            System.out.print(a[1]+"---");
            System.out.println(a[2]);
        }
    }
}
===================================打印输出:
11---11---2
1---2---1
2---3---2


稀疏数组转二维数组:

public class Test05 {
    public static void main(String[] args) {
        int a [][]=new int[3][3];
        a[0][0]=11;
        a[0][1]=11;
        a[0][2]=2;
        a[1][0]=1;
        a[1][1]=2;
        a[1][2]=1;
        a[2][0]=2;
        a[2][1]=3;
        a[2][2]=2;


        int[][] b=new int[a[0][0]][a[0][1]];
        for (int i =1;i<a.length;i++){
            b[a[i][0]][a[i][1]]=a[i][2];
        }
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                System.out.print(b[i][j]+"   ");
            }
            System.out.println();
        }
    }
}
================================打印输出:
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  



版权声明:本文为qq_42560968原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。