模拟稀疏数组的实现

稀疏数组的应用

在这里插入图片描述

这是一个11*11棋盘下了两个棋零的部分全是空的所以这样狠浪费空间,由此引出稀疏数组

稀疏数组的介绍

在这里插入图片描述在这里插入图片描述

创建稀疏数组思路分析

在这里插入图片描述

在这里插入图片描述

代码实现

package 稀疏数组;



/**
 * @author 你是大**吗?
 * version 1.0
 */
@SuppressWarnings({
    
    "all"})
public class SparseArray {
    
    
    public static void main(String[] args) {
    
    
        //创建原有的数组

        //0 空 1 白子 2 黑子
        int chessArr1[][]= new int[11][11];
        chessArr1[1][2]=1;
        chessArr1[2][3]=2;
        chessArr1[4][5]=9;

        //输出查看
        //增强for 根据数组名去出 第一行的给row[]
//        for (int row[] :chessArr1) {
    
    
//            for (int num :row) {
    
    
//                System.out.printf("%d\t",num);
//            }
//            System.out.println();
//        }

        //得出数组里面有值的元素有多少个
            int sum=0;
        for (int row[] :chessArr1) {
    
    
            for (int num :row) {
    
    
                if(num!=0){
    
    
                    sum++;
                }
            }

        }
        //创建稀疏数组
        int[][] chessArr2 = new int[sum + 1][3];
        chessArr2[0][0]=11;
        chessArr2[0][1]=11;
        chessArr2[0][2]=sum;//存放有值元素有多少个
        System.out.println(sum);
        //把值放到稀疏数组、
        int count=1;//表示稀疏数组的有几行 第0行存放了 所以从1开始
        for (int i = 1; i < chessArr1.length; i++) {
    
    
            for (int j = 0; j <chessArr1[i].length ; j++) {
    
    
                if(chessArr1[i][j]!=0){
    
    
                    //存放该值在哪一行
                    chessArr2[count][0]=i;

                    //存放该值在哪一列
                    chessArr2[count][1]=j;
                    chessArr2[count][2]=chessArr1[i][j];
                    count++;
                }
            }
        }
       //打印稀疏数组
        for (int i = 0; i < chessArr2.length; i++) {
    
    
            for (int j = 0; j <chessArr2[i].length ; j++) {
    
    
                System.out.printf("%d\t",chessArr2[i][j]);
            }
            System.out.println();
        }

        //让稀疏数组转换为普通数组
        int[][] chessArr3 = new int[chessArr2[0][0]][chessArr2[0][1]];

        //循环chessArr2.length-1次
        for (int i = 1; i < chessArr2.length; i++) {
    
    
            //第一次就是 chessArr2[1][0] =1 chessArr2[1][1]=2
            //chessArr2[1][2]=2  赋值给新的普通数组
           chessArr3[chessArr2[i][0]][chessArr2[i][1]]=chessArr2[i][2];
        }


   //测试恢复的数组
        //增强for 根据数组名去出 第一行的给row[]

        System.out.println("===================恢复之后=====================");
        for (int row[] :chessArr3) {
    
    
            for (int num :row) {
    
    
                System.out.printf("%d\t",num);
            }
            System.out.println();
        }


    }


}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_56398287/article/details/127020866