栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java与数据结构-稀疏数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java与数据结构-稀疏数组

线性结构(顺序存储和线性储存):数组、队列、链表和栈

非线性结构:二维数组、多维数组、广义表、树结构和图结构

稀疏数组:当一个数组大部分是0,或者为同一个值的数组时,可以用稀疏数组来保存该数组。

稀疏数组的处理方法:

1)记录数组一共几行几列,有多少个不同的值;

2)把具有不同值的元素的行列及数值记录在一个小规模的数组中,从而缩小程序的规模。

应用场景:

举例说明:

稀疏数组的转换思路

1)二维数组转稀疏数组的思路

1.遍历原始的二维数组,得到有效数据的个数sum;

2.根据sum创建稀疏数组 sparseArr int[sum+1][3];

3.将二维数组的有效数据存入到稀疏数组。

2)将稀疏数组转原始的二维数组

1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组;

2.再读取稀疏数组后几行的数据,并赋值给原始的二维数组。

代码实现:

 

package sparse_array;
public class SparseArray {
    public static void main(String[] args) {
        //创建原始二维数组 11*11
        //0表示没有棋子;1表示黑子;2表示蓝子
        int[][] chessArray = new int[11][11];
        chessArray[1][2] = 1;
        chessArray[2][3] = 2;
        //输出原始的二维数组
        System.out.println("原始二维数组:");
        for (int[] row:chessArray) {
            for (int data:row){
                System.out.printf("%dt",data);
            }
            System.out.println();
        }
        System.out.println();
        
        //1.遍历原始的二维数组,得到有效数据的个数sum;
        int sum = 0;
        for (int i = 0; i < chessArray.length; i++) {
            for (int j = 0; j < chessArray[0].length; j++) {
                if (chessArray[i][j] != 0)
                    sum++;
            }
        }
        System.out.println("非0数值个数:"+sum);
        System.out.println();
        //  2.根据sum创建稀疏数组 sparseArr int[sum+1][3];
        int[][] sparseArray = new int[sum+1][3];
        //  3.将二维数组的有效数据存入到稀疏数组。
        sparseArray[0][0] = chessArray.length;
        sparseArray[0][1] = chessArray[0].length;
        sparseArray[0][2] = sum;
        int row = 1;
        for (int i = 0; i < chessArray.length; i++) {
            for (int j = 0; j < chessArray[0].length; j++) {
                if (chessArray[i][j] != 0){
                    sparseArray[row][0] = i;
                    sparseArray[row][1] = j;
                    sparseArray[row][2] = chessArray[i][j];
                    row++;
                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组:");
        for (int i = 0; i < sparseArray.length; i++) {
            for (int j = 0; j < sparseArray[0].length; j++) {
                System.out.printf("%dt",sparseArray[i][j]);
            }
            System.out.println();
        }
        System.out.println();
    
    //1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组;
    int[][] chessArray2 = new int[sparseArray[0][0]][sparseArray[0][1]];
    // 2.再读取稀疏数组后几行的数据,并赋值给原始的二维数组。
        for (int i = 1; i < sparseArray.length; i++) {
                chessArray2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }
        //输出原始数组
        System.out.println("恢复的原始二维数组:");
        for (int[] row2:chessArray2) {
            for (int data:row2){
                System.out.printf("%dt",data);
            }
            System.out.println();
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/895129.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号