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

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

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

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

稀疏数组
  • 数据结构与算法-稀疏数组
    • 稀疏数组(sparsearray)
    • 代码实例
    • 在这里插入图片描述
    • IO流操作
    • 总结

数据结构与算法-稀疏数组 稀疏数组(sparsearray)

介绍:当一个数组中大部分元素为0或者为其他同一个值的数组时,我们可以使用稀疏数组来进行保存。

如下图,代码情景所展示:

  • 稀疏数组的第一行内容主要包括,[0][0]记录原始数组共有几行,[0][1]记录原始数组共有几列,[0][2]记录原始数组中有几个不同的值。
  • 稀疏数组的后几行则表示,该值在原始数组中的几行几列。
  • 稀疏数组共有三列,列数是固定的。行数根据原始数组的不同值个数决定。

代码实例

通过上图中提供的情景,进行代码编写

package com.liulin.sparsearray;

import org.junit.Test;

public class SparseArrayTest {
    
    @Test
    public void getArray(){
        //创建11*11大小的原始数组
        int[][] currentArray = new int[11][11];
        //根据图片内容给原始数组进行赋值操作
        currentArray[1][2] = 1;
        currentArray[2][3] = 2;

        //此时我们需要知道,原始数组中有几个有效元素
        int sum = 0;
        //通过增强for循环进行数组遍历
        for (int[] a : currentArray){
            for (int x : a){
                //判断原始二维数组里面,不为空的有效数值个数
                if (x != 0){
                    sum++;
                }
            }
        }
        System.out.println(sum);
        //拿到原始数组中的有效数值个数
        //可以创建我们稀疏数组的大小,为(sum+1)*3
        int[][] sparseArray = new int[sum+1][3];

        //由稀疏数组包含内容条件,可知
        //稀疏数组[0][0]为原始数据行数
        sparseArray[0][0] = currentArray.length;
        //稀疏数组[0][1]为原始数据列数
        sparseArray[0][1] = currentArray[0].length;
        //稀疏数组[0][2]为原始数组有效值个数
        sparseArray[0][2] = sum;

        
        int index = 1;
        //for循环遍历原始二维数组
        for (int i = 0; i < currentArray.length; i++){
            for (int j = 0; j < currentArray[i].length; j++){
                if (currentArray[i][j] != 0){
                    //添加原始数组中有效数值的位置
                    //此时index表示稀缺数组的行数下标
                    sparseArray[index][0] = i;
                    sparseArray[index][1] = j;
                    sparseArray[index][2] = currentArray[i][j];
                    //添加完成后,我们需要对稀疏数组下一行进行添加
                    //index++,表示下一次进来,指向的是数组第三行,下标为2
                    index++;
                    //如果稀疏数组已经将所有有效数存入,则没必要继续循环
                    if (index == sum){
                        break;
                    }
                }
            }
        }
        //对稀疏数组进行遍历显示
        System.out.println("rowtcoltval");
        for (int[] i:sparseArray){
            for (int x: i){
                System.out.print(x+"t");
            }
            System.out.println();
        }
    }
}


程序运行结果


IO流操作

将转换出来的稀疏数组保存进硬盘文件下,代码实例如下(接上半代码):

        //对稀疏数组进行遍历显示
        System.out.println("rowtcoltval");
        for (int[] i:sparseArray){
            for (int x: i){
                System.out.print(x+"t");
            }
            System.out.println();
        }
        System.out.println("**************");

        //IO字符输出(写入)流
        FileWriter fileWriter = new FileWriter("sparseArrayFile.txt");
        for (int[] i:sparseArray){
            for (int x: i){
                //增强for循环写入每一个int型值
                fileWriter.write(x);
            }
        }
        //流关闭
        fileWriter.close();

        //IO字符输入(读)流
        int read = 0;
        FileReader fileReader = new FileReader("sparseArrayFile.txt");
        for (;;){
            if ((read = fileReader.read()) != -1){
                System.out.print(read+"t");
            }else{
                break;
            }
        }
        fileReader.close();

运行效果截图:



总结

将稀疏数组从文件中输出到程序,并转换成对应的原始数组操作与上部分类似,就不在重复编写了。

代码编写可能比较简陋,主要是新手刚开始进入学习,希望喜欢的观众老爷可以多多点赞支持加关注,谢谢!!

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

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

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