当前位置 博文首页 > 李亚飞的博客:数据结构——稀疏数组与二维数组

    李亚飞的博客:数据结构——稀疏数组与二维数组

    作者:[db:作者] 时间:2021-09-12 18:08


    title: 稀疏数组与二维数组
    categories:

    • 数据结构
      tags:
    • 数据结构
      typora-root-url: …/
      abbrlink: 1245787517
      date: 2019-09-20 16:40:15

    稀疏数组

    介绍

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

    处理方式

    • 记录数组一共有几行几列,有多少个不同的值

    • 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

    图示

    {% asset_img 1569747096169.png %}

    package com.leeyf.sparsearray;
    
    import java.io.*;
    
    /**
     * 稀疏数组
     */
    public class SparseArray {
        public static void main(String[] args) {
            /*
             * 将二维数组转换成稀疏数组
             */
            //创建原始的二维数组(五子棋盘)
            //0 表示没有值 1表示黑子 2表示蓝子
            int[][] chessArr1 = new int[11][11];
            chessArr1[1][2] = 1;
            chessArr1[2][3] = 2;
            chessArr1[5][6] = 2;
            //输出原始二维数组
            System.out.println("原始二维数组:");
            for (int[] row : chessArr1) {
                for (int data : row) {
                    System.out.printf("%d\t", data);
                }
                System.out.println();
            }
            //将二维数组转成稀疏数组
            //1.先遍历得到有效数据个数
            int sum = 0; //有效数据个数
            for (int[] row : chessArr1) {
                for (int data : row) {
                    if (data != 0) {
                        sum++;
                    }
                }
            }
            //2.创建对应稀疏数组
            int[][] sparseArr = new int[sum + 1][3];
            //给稀疏数组赋值
            sparseArr[0][0] = 11;
            sparseArr[0][1] = 11;
            sparseArr[0][2] = sum;
    
            //遍历二维数组,将非零值存入sparseArr中
            int count = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (chessArr1[i][j] != 0) {
                        count++;
                        sparseArr[count][0] = i;
                        sparseArr[count][1] = j;
                        sparseArr[count][2] = chessArr1[i][j];
    
                    }
                }
            }
    
            //输出稀疏数组
            System.out.println();
            System.out.println("得到的稀疏数组:");
            for (int[] a : sparseArr) {
                for (int b : a) {
                    System.out.printf("%d\t", b);
                }
                System.out.println();
            }
    
            //创建文件
            File file = new File("/home/leeyf/my.data");
    
            try {
                //文件写入
                FileOutputStream fileInputStream = new FileOutputStream(file);
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileInputStream, "GBK");
                for (int[] a : sparseArr) {
                    for (int b : a) {
                        outputStreamWriter.write(b + "\t");
                    }
                    outputStreamWriter.write("\n");
                    outputStreamWriter.flush();
    
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            int[][] sparseArr2 = new int[sum + 1][3];
            try {
                //文件读取
                FileInputStream fileInputStream = new FileInputStream(file);
                InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "GBK");
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                for (int i = 0; i < sparseArr2.length; i++) {
                    String s = bufferedReader.readLine();
                    String[] s1 = s.split("\t");
                    for (int j = 0; j < s1.length; j++) {
                        sparseArr2[i][j] = Integer.parseInt(s1[j]);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println("得到的稀疏数组2:");
            for (int[] a : sparseArr2) {
                for (int b : a) {
                    System.out.printf("%d\t", b);
                }
                System.out.println();
            }
            /*
             *将稀疏数组转换为二维数组
             */
            //读取稀疏数组第一行,创建二维数组
            System.out.println(sparseArr[0][0]);
            System.out.println(sparseArr[0][1]);
            int[][] chessArr2 = new int[sparseArr2[0][0]][sparseArr2[0][1]];
            for (int i = 1; i < sparseArr.length; i++) {
                chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];
    
            }
            System.out.println("转换后的二维数组:");
            for (int[] row : chessArr2) {
                for (int data : row) {
                    System.out.printf("%d\t", data);
                }
                System.out.println();
            }
        }
    }
    
    cs
    下一篇:没有了