package sparseArray;

public class SparseArray {

    public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个原始的二维数组
// 0表示没有棋子,1表示黑子,2表示蓝子
int chessArr1[][] =new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
//输出原始二维数组
System.out.println("原始的二维数组:");
for(int [] row:chessArr1)
{
for (int data:row)
{
System.out.printf("%d\t",data);
}
System.out.println();
}
//将二维数组转化成稀疏数组
//先遍历二维数组,获取非零元素的个数
int sum=0;
for(int i=0;i<chessArr1.length;i++)
{
for(int j=0;j<chessArr1[0].length;j++)
{
if(chessArr1[i][j]!=0)
{
sum++;
}
}
}
//创建对应的一个稀疏数组
int sparseArr2[][]=new int[sum+1][3];
//给稀疏数组赋值
sparseArr2[0][0]=11;
sparseArr2[0][1]=11;
sparseArr2[0][2]=sum;
int index=1;//稀疏数组的下标,记录是第几个非零数据
//遍历二维数组,将非零的值,存储到稀疏数组中
for(int i=0;i<chessArr1.length;i++)
{
for(int j=0;j<chessArr1[0].length;j++)
{
if(chessArr1[i][j]!=0)
{
sparseArr2[index][0]=i;
sparseArr2[index][1]=j;
sparseArr2[index][2]=chessArr1[i][j];
index++;
}
}
} //输出稀疏数组的形式
System.out.println("得到的稀疏数组为如下形式:");
for(int i=0;i<sparseArr2.length;i++)
{
System.out.printf("%d\t%d\t%d\t",sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
System.out.println();
}
//将稀疏数组回复称原来的二维数组
//先读取稀疏数组的第一行
//赋值给对应数组就好了
int chessArr3[][]=new int[sparseArr2[0][0]][sparseArr2[0][1]];
//循环赋值
for(int i=1;i<sparseArr2.length;i++)
{
chessArr3[sparseArr2[i][0]][sparseArr2[i][1]]=sparseArr2[i][2];
}
//////////////////////////
System.out.println("输出恢复后的二维数组:");
for(int i=0;i<sparseArr2[0][0];i++)
{
for(int j=0;j<sparseArr2[0][1];j++)
{
System.out.printf("%d\t",chessArr3[i][j]);
}
System.out.println();
}
} }

java实现稀疏数组压缩的更多相关文章

  1. Java的稀疏数组的简单代码实现

    目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...

  2. java算法--稀疏数组

    数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...

  3. 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...

  4. 数据结构(1):稀疏数组使用java实现

    主要是用于数组压缩,去除无效的数组内容: 原数组内容: 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 转换成 稀疏数组 5 5 2 1 1 1 2 ...

  5. 数据结构与算法之java语言实现(一):稀疏数组

    一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...

  6. Java数据结构之稀疏数组(Sparse Array)

    1.需求 编写的五子棋程序中,有存盘退出和续上盘的功能.因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,为了压缩存储所以采用稀疏数组. 2.基本介绍 当一个数组中大部分元素为0,或者为 ...

  7. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  8. Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组

    目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...

  9. Java数据结构和算法(2)之稀疏数组

    1.定义 稀疏数组可以看做是普通二位数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组,关于稀疏数组的运用有五子棋盘,地图等.. *当一个数组中大部分元素为0,或者为同一个值的数组时 ...

随机推荐

  1. QT:QSS字体设置

    css,qss font-family常用的黑体宋体等字体中英文对照 当qss使用中文设置字体时,无法生效.因为qss不支持中文设置字体,所以下面给出一些常用的黑体宋体字体中英文对照. 微软雅黑: M ...

  2. Windows安装MongoDB .zip绿色版

    本文链接:https://blog.csdn.net/HTouying/article/details/88428452 MongoDB官网下载链接:https://www.mongodb.com/d ...

  3. 分布式-信息方式-ActiveMQ静态网络连接的容错

    容错的链接Failover Protocol 前面讲述的都是client配置链接到指定的 broker上.但是,如果 Broker的链接失败怎么办呢?此时, Client有两个选项:要么立刻死掉,要么 ...

  4. Vue源码阅读一:说说vue.nextTick实现

    用法: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 疑惑: 怎么实现的延迟回调 原理: JavaScript语言的一大特点就是单线程,同一个时 ...

  5. C++入门经典-例5.15-回收动态内存的一般处理步骤

    1:正确的步骤应该是如下代码所示: // 5.15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostrea ...

  6. spring boot 常用注解

    @RestController和@RequestMapping注解 4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解.4.0之前的版本,spring M ...

  7. 石川es6课程---1-2、ES6简介

    石川es6课程---1-2.ES6简介 一.总结 一句话总结: 从ECMAScript的历史发展来看,太顺了的时候总会遇到一挫折,比如ecma4 1.ECMAScript 和 JavaScript关系 ...

  8. debian安装图形界面,使用mstsc远程登录

    环境:debian 10.2 更新软件列表 apt-get update 安装最基本的gnome图形相关软件 apt install x-window-system-core gnome-core 安 ...

  9. Vue路由器的简单实现

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. leetcode 621 任务调度器 Task Scheduler

    给定一个用字符数组表示的 CPU 需要执行的任务列表.其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务.任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完.CPU 在 ...