稀疏数组(狂神)

说明:

  • 之前学的时候没有学过稀疏数组,这次复习一边把它记录在博客,这是自己写的没按着老师视频来,供大家参考

  • 想方法名和变量名真的给我想蒙了!!!

代码:

package com.luffy.array;


/**
 *
 * 稀疏数组
 *
 * */
public class Demo_08 {
    
    

    //取出存在值的总数
    private static int sum;
    //定义三个一维数组用来存储值的位置和值
    private static int[] line;
    private static int[] column;
    private static int[] value;
    //使存储指定数据的数组能够正常增长
    private static int number = 0;
    //初始棋盘数组
    private static int[][] numbers;
    //稀疏数组
    private static int[][] arrays;
    //复原棋盘数组
    private static int[][] recovery;


    public static void main(String[] args) {
    
    
        //定义一个初始的棋盘大数组
        numbers = new int[11][11];
        numbers[1][2] = 1;
        numbers[2][3] = 2;
        numbers[4][3] = 3;

        //打印初始棋盘数组
        printBoard(numbers);
        //得到稀疏数组中有效的总值
        validValues();
        //给稀疏数组的标题赋值
        arraysTitle();
        //将有效的值交给指定的数组来处理,并赋值给稀疏数组
        storyDataArray();
        //打印稀疏数组
        printSparseArray();
        //将稀疏数组复原成初始数组大棋盘
        recoveryArray();
        //打印复原后的稀疏数组
        printRecoveryArray();
    }


    /**
     * 打印初始棋盘数组
     * */
    public static void printBoard(int[][] numbers){
    
    
        System.out.println("原始大棋盘");
        for (int[] number : numbers) {
    
    
            for (int i : number) {
    
    
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }


    /**
     * 得到稀疏数组中有效的总值
     */
    public static void validValues(){
    
    
        for (int i = 0; i < numbers.length; i++) {
    
    
            for (int j = 0; j < numbers.length; j++) {
    
    
                if(numbers[i][j] != 0){
    
    
                    sum++;
                }
            }
        }
        //初始化指定数据数组
        line = new int[sum];
        column = new int[sum];
        value = new int[sum];
    }


    /**
     * 给稀疏数组的标题赋值
     * */
    public static void arraysTitle(){
    
    
        arrays = new int[sum + 1][3];
        arrays[0][0] = numbers.length;
        arrays[0][1] = numbers[10].length;
        arrays[0][2] = sum;
    }


    /**
     * 将有效的值交给指定的数组来处理,并赋值给稀疏数组
     * */
    public static void storyDataArray(){
    
    
        for (int i = 0; i < numbers.length; i++) {
    
    
            for (int j = 0; j < numbers.length; j++) {
    
    
                if(numbers[i][j] != 0){
    
    
                    //将查找到的值的位置和值交给指定的数组来处理
                    receive(i,j, numbers[i][j]);
                }
            }
        }
        //将处理好的数据存入稀疏数组
        for (int i = 1; i <= sum; i++) {
    
    
            arrays[i][0] = line[i-1];
            arrays[i][1] = column[i-1];
            arrays[i][2] = value[i-1];
        }
    }


    /**
     * 将存在的值的位置和值取出放入指定的数组
     */
    public static void receive(int a, int b, int c){
    
    
        line[number] = a;
        column[number] = b;
        value[number] = c;
        number++;
    }


    /**
     * 打印稀疏数组
     * */
    public static void printSparseArray(){
    
    
        System.out.println("转换成稀疏数组");
        for (int[] array : arrays) {
    
    
            for (int i : array) {
    
    
                System.out.print(i + "\t");
            }
            System.out.println();
        }
    }


    /**
     * 将稀疏数组复原成初始数组大棋盘
     * */
    public static void recoveryArray(){
    
    
        recovery = new int[numbers.length][numbers[10].length];
        //给复原数组添加数据
        for(int i = 0;i < line.length; i++){
    
    
            recovery[line[i]][column[i]] = value[i];
        }
    }

    /**
     * 打印复原后的稀疏数组
     */
    public static void printRecoveryArray(){
    
    
        System.out.println("打印复原后的稀疏数组");
        for (int[] ints : recovery) {
    
    
            for (int anInt : ints) {
    
    
                System.out.print(anInt + "\t");
            }
            System.out.println();
        }
    }


}

  • 补充:本文章是按狂神老师学习的视频做的!
  • 狂神老师学习网址:https://www.kuangstudy.com/

Guess you like

Origin blog.csdn.net/lufeia/article/details/120579092