Java_数组_稀疏数组

稀疏数组

本文md文件

当一个数组中大部分元素为0或者同一值时,可以用稀疏数组来保存该数组、

处理方式

  1. 记录数组一共有几行几列,有多少个不同值
  2. 把具有不同值的元素和行列和值记录在一个小规模数组中,缩小程序的规模

创建一个新数组用来储存不同的值和他对应的位置

如数组a[][]

0000
0040
0600
0000
0070
8000
0000

其中的 6、7、8、4

就可以通过创建一个新的数组a1[]来存放数据

7(共7行)4(共4列)4(共4个值)
124
216
427
508

代码

package text1;

import java.util.Scanner;

public class text1 {
    public static void main(String[] args) {
        int[][] a=new int[7][4];//创建一个7行4列的数组a
        a[1][2]=4;//分别将值赋值到数组的对应位置
        a[2][1]=6;
        a[4][2]=7;
        a[5][0]=8;
        System.out.println("初始数组为:");
        for (int[] ints:a) {
            for (int ints1:ints) {
                System.out.print(ints1+"\t");
            }
            System.out.println();
        }//输出原始数组
        int a1 = 0;//计数用整数型变量a1
        for (int i = 0; i < 7; i++) {
            for (int j = 0; j < 4; j++) {
                if (a[i][j]!=0){
                    a1++;
                }
            }
        }//寻找有效值的个数
        System.out.println("有效值共:"+a1+"个");
        System.out.println("稀疏数组为:");
        int b[][] = new int[a1+1][3];//创建一个新数组,以有效个数+1为行数,共3列

        b[0][0]=7;//行
        b[0][1]=4;//列
        b[0][2]=a1;//个数

        int a2=0;//计数
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                if (a[i][j]!=0){
                    a2++;
                    b[a2][0]=i;
                    b[a2][1]=j;
                    b[a2][2]=a[i][j];
                }
            }
        }//将数组a中非0值的位置和数值复制给洗漱数组
        for (int i = 0; i < b.length; i++) {
            System.out.println(b[i][0]+"\t"+b[i][1]+"\t"+b[i][2]+"\t");
        }//输出稀疏数组
        System.out.println();
        System.out.println("还原稀疏数组:");
        int[][] a3=new int[b[0][0]][b[0][1]];//数组a的长和宽前面赋值给了b的第一行的两个数
        for (int i = 1; i < b.length; i++) {//数组b的第一行为行数、列数、个数,从第二行开始索引
            a3[b[i][0]][b[i][1]]=b[i][2];//数组a中的非0数值的值前面赋值给了b的第三列
        }
        for (int[] ints:a3) {
            for (int ints1:ints) {
                System.out.print(ints1+"\t");
            }
            System.out.println();
        }
    }
}

运行结果

初始数组为:
0	0	0	0	
0	0	4	0	
0	6	0	0	
0	0	0	0	
0	0	7	0	
8	0	0	0	
0	0	0	0	
有效值共:4个
稀疏数组为:
7	4	4	
1	2	4	
2	1	6	
4	2	7	
5	0	8	

还原稀疏数组:
0	0	0	0	
0	0	4	0	
0	6	0	0	
0	0	0	0	
0	0	7	0	
8	0	0	0	
0	0	0	0	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值