数据结构之二维数组与稀疏数组的转换

Posted jiushixihuandaqingtian

tags:

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

1.二维数组

二维数据其实就是高数中的矩阵,在此不做过多的解释

2.稀疏数组

当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存

稀疏数组的处理方法:

1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值

2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模

3.例子如下:

技术图片

 

4.下面是稀疏数组以及二维数组之间的转换

package com.ebiz.array;

/**
 * @author YHj
 * @create 2019-07-13 16:46
 * <p>
 * 稀疏数组
 */
public class SparseArray 

    public static void main(String[] args) 
        //创建原始二维数组  11*11    1代表黑子  2代表白子
        int[][] chessArray1 = new int[11][11];

        //第一行第二列有一个黑子
        chessArray1[1][2] = 1;
        //第二行第三列有一个白子
        chessArray1[2][3] = 2;

       /* System.out.println("原始二维数组");
        for (int[] row : chessArray1) 
            for (int i : row) 
                System.out.printf("%d\\t",i);
                //System.out.print(i+"\\t");
            
            System.out.println();
        */

        //将二维数组转成稀疏数组
        //1.得到原始数组中非0数值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) 
            for (int j = 0; j < 11; j++) 
                if (chessArray1[i][j] != 0) 
                    sum++;
                    System.out.println();
                
            
        
        // System.out.println("sum=" + sum);
        //2.创建稀疏数组
        int[][] sparseArray = new int[sum+1][3];
        //3.稀疏数组赋值
        //3.1 第0行
        sparseArray[0][0]=11;
        sparseArray[0][1]=11;
        sparseArray[0][2]=sum;

        //3.2 遍历原始数组,将非空值付给稀疏数组
        int count=0;  //定义一个计数器,改变行数
        for (int i = 0; i < 11; i++) 
            for (int j = 0; j < 11; j++) 
                if (chessArray1[i][j] != 0) 
                    count++;
                    sparseArray[count][0]=i;
                    sparseArray[count][1]=j;
                    sparseArray[count][2]=chessArray1[i][j];

                
            
        
        //输出稀疏数组
        System.out.println("字数数组为:");
        for (int[] row : sparseArray) 
            for (int i : row) 
                System.out.printf("%d\\t",i);
            
            System.out.println();
        

        System.out.println("------------------------------------------------------------");
        System.out.println("稀疏数组复原");

        //根据稀疏数组创建对应数组
        int [][] chary=new int[sparseArray[0][0]][sparseArray[0][1]];

        //遍历稀疏数组,付给chary
        for (int i = 1; i < sparseArray.length; i++) 
            chary[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
        

        //输出array
        for (int[] row : chary) 
            for (int i : row) 
                System.out.printf("%d\\t",i);
                //System.out.print(i+"\\t");
            
            System.out.println();
        


    

 

以上是关于数据结构之二维数组与稀疏数组的转换的主要内容,如果未能解决你的问题,请参考以下文章

Java数据结构与算法——稀疏数组和二维数组之间的转换

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

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

通过五子棋案例,实现稀疏数组与二维数组直接互相转换。

数据结构与算法之java语言实现:稀疏数组

数据结构与算法(Java)之稀疏数组与队列