数据结构算法学习(1)-稀疏数组(Java实现)


## 稀疏数组(棋盘类必备)

package com.joseph.sparseArray;

public class SparseArray {
    public static void main(String[] args) {
        //创建11*11的棋盘
        //0表示棋子。1表示黑子。2表示白子
        int chessArr1[][] = new int[11][11] ;
        chessArr1[1][2] = 1 ;//第二行第三列是1;
        chessArr1[2][3] = 2 ;//第三行第四列是2;
        chessArr1[3][4] = 3 ;//第四行第五列是3;
        for(int arr[] : chessArr1){
            for(int arrKey:arr) {
                System.out.print(arrKey + "、");
            }
            System.out.println();
        }
        /**
         * 将二维数组变为稀疏数组
         */
        //获取原二维数组非0值个数
        int count = 0 ;
        for(int arr[]:chessArr1){
            for (int e:arr){
                if(e!=0){
                    count++;
                }
            }
        }
        //创建稀疏数组并初始化第一行的值
        int sparseArr[][] = new int[count+1][3];
        int index = 0 ;
        sparseArr[0][0] = chessArr1.length;
        sparseArr[0][1] = chessArr1[0].length;
        sparseArr[0][2] = count;
        //给稀疏数组第二行开始赋值
        for(int i = 0 ; i 

这里的行数和列数为了更加清晰。我们加1处理。为了直接知道第几行第几列

而真正的行列数是从0开始。

这样就成功地把二维数组转换为稀疏数组。如果要用这个二维数组。再将它继续转化。原理是利用数组中元素代表着行数列数和具体的值。拿出来可以用上。具体代码如下

//稀疏数组转二维数组
        //还原二维数组初始化
        int row = sparseArr[0][0] ;
        int col = sparseArr[0][1] ;
//        System.out.println(row + "," + col);
        int chessArr2[][] = new int[row][col] ;
        //放入非零的值
        for(int a = 1 ; a

# 我们发现好像行数列数有点问题。是因为上边的稀疏数组为了直观表明原数组的值的行列数。我们加一处理了。但并不影响我们还原成功。实际上大家应用的时候。不要加一。因为数组下标从0开始。计算机可不需要直观的表现。

## 这样我们就完成了稀疏数组的编程

相关