广告
返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈Java数据结构之稀疏数组知识总结
  • 115
分享到

浅谈Java数据结构之稀疏数组知识总结

2024-04-02 19:04:59 115人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

稀疏数组 当一个数组中的元素大多为0或者相同元素的时候,可以用稀疏数组来压缩 稀疏数组只记录 行row 列col 值value 将下列的二维数组转为稀疏数组,如下

稀疏数组

  • 当一个数组中的元素大多为0或者相同元素的时候,可以用稀疏数组来压缩
  • 稀疏数组只记录 行row 列col 值value

将下列的二维数组转为稀疏数组,如下两图所示

二维数组
稀疏数组

1.实现二维数组转为稀疏数组的步骤:

  • 遍历数组,得到数组中 不为0的个数,并记录为sum,作为稀疏数组第0行的 value
  • 遍历数组,将数组中不为0的数的行和列和值分别写入稀疏数组的 row col val 中

代码实现:


public class SparseArray {
    public static void main(String[] args) {

        // 创建一个原始二维数组
        // 0表示没有棋子,1,2各表示一种棋
        int chessArr[][] = new int[8][8];
        chessArr[1][1] = 1;
        chessArr[2][2] = 2;

        // 遍历原始数组,获得不等于 0 的个数,并输出原始数组
        int sum = 0;
        System.out.println("原始数组:");
        for (int[] ints : chessArr) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
                if (anInt != 0){
                    sum++;
                }
            }
            System.out.println();
        }
        System.out.println(sum);

        // 创建稀疏数组并赋值
        int sparseArray[][] = new int[sum+1][3];
        int row = chessArr.length; // 原数组的行数
        int col = chessArr[0].length; // 原数组的列数
        sparseArray[0][0] = row;
        sparseArray[0][1] = col;
        sparseArray[0][2] = sum;

        // 遍历原始数组并赋值给稀疏数组
        int count = 0; // count 为计数器
        for (int i = 0;i < row;i++) {
            for (int j = 0;j < col;j++) {
                if (chessArr[i][j] != 0) {
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = chessArr[i][j];
                }
            }
        }

        // 输出得到的稀疏数组
        System.out.println("稀疏数组为:");
        for (int i = 0 ;i < sparseArray.length;i++) {
            System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]);
        }

    }
}

2.实现二维数组转稀疏数组的步骤

  • 根据稀疏数组的第一行创建新的二维数组
  • 遍历稀疏数组,将row col val 赋给新的二维数组

代码实现:


public class SparseArray {
    public static void main(String[] args) {
        
        
		...... // 接上一段代码
            
            
        // 输出得到的稀疏数组
        System.out.println("稀疏数组为:");
        for (int i = 0 ;i < sparseArray.length;i++) {
            System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]);
        }

        // 创建新的二维数组
        int newChessArray[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
        for (int i = 1 ;i < sparseArray.length;i++) {
            newChessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }

        // 输出新的二维数组
        System.out.println("恢复后的二维数组是:");
        for (int[] ints : newChessArray) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}

3.将稀疏数组写入磁盘


public static void main(String[] args) {
    ........
	// 将稀疏数组存入磁盘
    FileOutputStream fw = null;
    try {
        fw = new FileOutputStream("sparseArray.txt");
        // 遍历写入磁盘
        for (int i = 0; i < sparseArray.length; i++) {
            for (int j = 0; j < 3; j++) {
                fw.write(sparseArray[i][j]);
            }
        }
        fw.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fw != null){
            fw.close();
        }
    }
}

4.从磁盘读取稀疏数组


public static void main(String[] args) {
    .......
    // 从磁盘读取稀疏数组
    FileInputStream fi = null;
    int newSparseArray[][] = new int[sum+1][3];  // sum 指前面二维数组有值的个数
    try {
        fi = new FileInputStream("sparseArray.txt");
        for (int i = 0;i < newSparseArray.length;i++) {
            for (int j = 0;j < 3;j++){
                newSparseArray[i][j] = fi.read();
            }
        }
    } catch (FileNotFoundException e){
        e.printStackTrace();
    } finally {
        if (fi != null){
            fi.close();
        }
    }
}

到此这篇关于浅谈Java数据结构之稀疏数组知识总结的文章就介绍到这了,更多相关Java稀疏数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈Java数据结构之稀疏数组知识总结

本文链接: https://www.lsjlt.com/news/126730.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈Java数据结构之稀疏数组知识总结
    稀疏数组 当一个数组中的元素大多为0或者相同元素的时候,可以用稀疏数组来压缩 稀疏数组只记录 行row 列col 值value 将下列的二维数组转为稀疏数组,如下...
    99+
    2022-11-12
  • java数据结构基础:稀疏数组
    目录稀疏数组:实现思路:举例:二维数组转稀疏数组实现思路:稀疏数组恢复二维数组实现思路:代码实现:输出结果:总结稀疏数组: 当一个二维数组中大部份的值为0,或者为同一值的时候,可以用...
    99+
    2022-11-12
  • Java数据结构之稀疏数组的实现与应用
    目录1.稀疏数组引入1.1 使用场景1.2 稀疏数组简介2.稀疏数组的实现2.1 案例概述2.2 思路分析2.3 代码实现1.稀疏数组引入 1.1 使用场景 笔者在课程设计中曾写过一...
    99+
    2022-11-13
    Java 数据结构 稀疏数组 Java 稀疏数组
  • golang数据结构之golang稀疏数组sparsearray详解
    目录一、稀疏数组1. 先看一个实际的需求2. 基本介绍3. 应用实例一、稀疏数组 1. 先看一个实际的需求 编写的五子棋程序中,有存盘退出和续上盘的功能 分析按照原始的方式来的二维...
    99+
    2022-11-12
  • Java数据结构知识总结
    本篇内容主要讲解“Java数据结构知识总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java数据结构知识总结”吧!目录逻辑结构和物理结构顺序结构,链式结构,栈,队列,二叉树二叉树普通二叉树:...
    99+
    2023-06-20
  • java数据结构算法稀疏数组示例详解
    目录一、什么是稀疏数组二、场景用法1.二维数组转稀疏数组思路2.稀疏数组转二维数组思路3.代码实现一、什么是稀疏数组 当一个数组a中大部分元素为0,或者为同一个值,那么可以用稀疏数组...
    99+
    2022-11-13
  • java数据结构中稀疏数组的实现方法
    这篇文章主要讲解了“java数据结构中稀疏数组的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据结构中稀疏数组的实现方法”吧!目录稀疏数组:实现思路:举例:二维数组转稀疏数...
    99+
    2023-06-20
  • Java数据结构之链表相关知识总结
    一、链表 1.1 概述 链表是真正动态的数据结构,最简单的动态数据结构,基本用于辅助组成其他数据结构。 数据存储在“节点”(Node)中 优点:真正的动态,不需要处理固定容量的问题...
    99+
    2022-11-12
  • Java数据结构与算法之稀疏数组与队列深入理解
    目录一、数据结构和算法简介二、稀疏数组稀疏数组的应用实例二维数组与稀疏数组的转换二维数组 转 稀疏数组的思路稀疏数组 转 原始的二维数组的思路三、队列数组模拟队列代码优化:数组模拟环...
    99+
    2022-11-12
  • Java数据结构实现二维数组与稀疏数组转换详解
    基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外)。 ②把具有...
    99+
    2022-11-12
  • 浅谈Java设计模式之原型模式知识总结
    如何使用? 1.首先定义一个User类,它必须实现了Cloneable接口,重写了clone()方法。 public class User implements Cloneabl...
    99+
    2022-11-12
  • Java基础之数组超详细知识总结
    目录一、一维数组二、二维数组三、总结一、一维数组 1、Java语言中的数组是一种 引用数据类型。不属于基本数据类型。数组的父类是 Object。 2、数组实际上是一个容器,可以同时容...
    99+
    2022-11-12
  • 常用的Java数据结构知识点汇总
    目录1.数据结构分类2.线性数据结构2.1数组2.2可变数组2.3链表2.4栈2.5队列3.非线性数据结构3.1树3.2图3.3散列表3.4堆1. 数据结构分类 按照线性和非线性可以...
    99+
    2022-11-13
  • Go语言数据结构之二叉树必会知识点总结
    目录前言二叉树概念二叉树的性质创建二叉树树的遍历前序遍历(V-L-R)中序遍历(L-V-R)后序遍历(L-R-V)前言 如果你是一个开发人员,或多或少对树型结构都有一定的认识,我个人...
    99+
    2022-11-11
  • Java数组与堆栈相关知识总结
    一、数组创建 1.1 声明并赋值 int[] a = {1,2,3}; 1.2 声明数组名开辟空间并且赋值 int[] a; a = new int[]{1,2,3}; ...
    99+
    2022-11-12
  • Java数据结构之List的使用总结
    目录泛型什么是泛型泛型的分类泛型的定义简单演示泛型背后作用时期和背后的简单原理泛型类的使用泛型总结包装类基本数据类型和包装类直接的对应关系包装类的使用,装箱(boxing)和拆箱(u...
    99+
    2022-11-12
  • java基础详解之数据类型知识点总结
    目录一、基本数据类型1.1 整形1.1.1 int1.1.2 长整形:long1.1.3 短整形:short1.2 浮点型1.2.1 双精度浮点型:double1.2.2 单精度浮点...
    99+
    2022-11-12
  • Pytorch数据读取之Dataset和DataLoader知识总结
    目录一、前言二、Dataset三、DatasetLoader四、将Dataset数据和标签放在GPU上(代码执行顺序出错则会有bug)一、前言 确保安装 scikit-im...
    99+
    2022-11-12
  • Python基础之数据类型相关知识总结
    1、字符串 (1)概念 字符串英文名string,简称str。 字符串就是由一个个字符连接起来的组合, 你平时所见的字母、数字、汉字、符号都是字符。 字符串可以用...
    99+
    2022-11-12
  • 常用的Java数据结构知识点有哪些
    小编给大家分享一下常用的Java数据结构知识点有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. 数据结构分类按照线性和非线性可以将Java数据结构分为两大类:①线性数据结构:数组、链表、栈、队列②非线性数据结构:树...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作