java的数据结构(一) 稀疏矩阵

本文介绍了一种数据结构——稀疏数组,并通过一个具体的例子展示了如何将一个二维数组转换成稀疏数组,以及如何再从稀疏数组还原回原始的二维数组。此过程包括计算非零元素数量、创建稀疏数组、填充数据、打印稀疏数组以及最终恢复原始数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.atguigu.sparse;

public class SparseArray {
public static void main(String[] args){
int chessArr1[][] = new int[11][11]; //表示11行11列 自动初始化,赋值为00
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;

    System.out.println("原始的二维数组");
    System.out.println("二维数组的长度"+chessArr1.length);  //二维数组就是多少行为代表多少个数组

    //打印原始数组
    for(int[] row :chessArr1){
        for(int tem : row){
            System.out.printf("%d\t",tem);//函数printf是格式化输出函数
        }
        System.out.println("\n");
    }

    //进行数组的遍历
    int sum = 0;

    for(int i=0;i<11;i++){
        for (int j=0;j<11;j++){
            if (chessArr1[i][j] != 0){
                sum++;
            }
        }
    }


    //变换成稀疏数组
    //行应该是有效个数加一  sum

    int[][] sparseArray = new int [sum+1][3];
    sparseArray[0][0] = 11;
    sparseArray[0][1] = 11;
    sparseArray[0][2] = sum;

    //对二维数组进行遍历,将非0的元素进行赋值给稀疏矩阵
    int count = 0;
    for(int i=0;i<11;i++){
        for (int j=0;j<11;j++){
            if (chessArr1[i][j] != 0){
                count++;
                sparseArray[count][0] = i;
                sparseArray[count][1] = j;
                sparseArray[count][2] = chessArr1[i][j];
            }
        }
    }

    //对稀疏数组进行打印 这个稀疏矩阵
    for(int i=0;i<sparseArray.length;i++){
        System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
    }


    //将稀疏数组转化为二维数组
    int chessArr2[][] = new int [sparseArray[0][0]][sparseArray[0][1]];
    //读取稀疏矩阵从第二行开始
    for (int i=1;i<sparseArray.length;i++){
        chessArr2[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
    }

    System.out.println();
    System.out.println("恢复后的矩阵");
    //增强for循环是: 不是;
    for (int[] row : chessArr2){
        for(int tem:row){
            System.out.printf("%d\t",tem);
        }
        System.out.println();
    }
}

}

结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值