欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据结构与算法之稀疏数组

程序员文章站 2022-07-09 15:45:22
...

数据结构:线性结构和非线性结构

(1)线性结构
数据元素之间存在一对一对的线性关系
细分为有序和链式存储结构

(2)非线性结构
数据元素之间不一定是一对一对的关系

我们今天讲下的稀疏数组也是属于线性结构,稀疏数组的作用是大量的简化了多维数组重复元素,占用过多资源的问题。

数据结构与算法之稀疏数组

二维数组转稀疏数组
(1)遍历数组获取到有效数据个数sum
(2)根据sum创建稀疏数组的大小 new int[sum+1][3]
(3) 将二维数组的有效数据存入到稀疏数组中

稀疏数组转二维数组
(1)先读取稀疏数组的第一行的元素,分别是行,列,总公的有效值,根据信息创建二维数组
(2)在创建后存储在稀疏数组中的有效值

 //1 二维数组转稀疏数组
        
        //二维数组
        int arr1[][] = new int[11][11];
        arr1[1][2] = 1;
        arr1[2][3] = 2;
        for (int a[] : arr1) {
            for (int arr : a) {
                System.out.print("\t" + arr);
            }
            System.out.println();
        }

        int sum = 0;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                if (arr1[i][j] != 0) {
                    sum++;
                }
            }
        }

        //创建稀疏数组
        int spararr[][] = new int[sum + 1][3];
        spararr[0][0] = arr1.length;
        spararr[0][1] = arr1.length;
        spararr[0][2] = sum;

        int count = 0;
        for(int i = 0; i < arr1.length; i++){
            for(int j = 0; j < arr1[i].length; j++){
                if(arr1[i][j] != 0){
                    ++count;
                    spararr[count][0] = i;
                    spararr[count][1] = j;
                    spararr[count][2] = arr1[i][j];
                }
            }
        }


        for(int i = 0; i < spararr.length; i++){
            for(int j = 0; j < spararr[i].length; j++){
                System.out.print("\t"+spararr[i][j]);
            }
            System.out.println();
        }

        
        //2稀疏数组转二维数组
        
        //创建二维数组并赋值
        int chestarr[][] = new int[spararr[0][0]][spararr[0][1]];
        for(int i = 1; i < spararr.length; i++){
            chestarr[spararr[i][0]][spararr[i][1]] = spararr[i][2];
        }


        for (int i = 0; i < chestarr.length; i++){
            for(int j = 0; j < chestarr[i].length; j++){
                System.out.print("\t" + chestarr[i][j]);
            }
            System.out.println();
        }

    }

相关标签: 数据结构 算法