数据结构自学笔记(1)-- 稀疏数组

数据结构第一节-- 稀疏数组

  • 稀疏数组
    • 1.1稀疏数组的介绍
    • 1.2 稀疏数组图例
    • 1.3 稀疏数组的处理方法
    • 1.4 二维数组转换稀疏数组示例
    • 1.5 代码演示

稀疏数组

1.1稀疏数组的介绍

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

1.2 稀疏数组图例

左侧是原始二维数组,右侧是稀疏数组。
数据结构自学笔记(1)-- 稀疏数组_第1张图片

1.3 稀疏数组的处理方法

  1. 记录一个数组有几行几列,有多少不同的值。
  2. 把不同的数据记录在一个小规模的数组中。

1.4 二维数组转换稀疏数组示例

棋盘问题,如图所示,2代表蓝色棋子,1代表黑色棋子
左侧为棋盘,中间为二维数组,右侧为稀疏数组。
数据结构自学笔记(1)-- 稀疏数组_第2张图片

1.5 代码演示

package cn.scl.sparsearray;

/**
 * @author 超哥
 * @create 2021-05-11 17:59
 * 
 * //                          _ooOoo_                               //
 * //                         o8888888o                              //
 * //                         88" . "88                              //
 * //                         (| ^_^ |)                              //
 * //                         O\  =  /O                              //
 * //                      ____/`---'\____                           //
 * //                    .'  \\|     |//  `.                         //
 * //                   /  \\|||  :  |||//  \                        //
 * //                  /  _||||| -:- |||||-  \                       //
 * //                  |   | \\\  -  /// |   |                       //
 * //                  | \_|  ''\---/''  |   |                       //
 * //                  \  .-\__  `-`  ___/-. /                       //
 * //                ___`. .'  /--.--\  `. . ___                     //
 * //              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 * //            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 * //            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 * //      ========`-.____`-.___\_____/___.-`____.-'========         //
 * //                           `=---='                              //
 * //      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
 * //         佛祖保佑       永无BUG     永不修改                        //
 * 
 * 佛曰:
 * 写字楼里写字间,写字间里程序员;
 * 程序人员写程序,又拿程序换酒钱。
 * 酒醒只在网上坐,酒醉还来网下眠;
 * 酒醉酒醒日复日,网上网下年复年。
 * 但愿老死电脑间,不愿鞠躬老板前;
 * 奔驰宝马贵者趣,公交自行程序员。
 * 别人笑我忒疯癫,我笑自己命太贱;
 * 不见满街漂亮妹,哪个归得程序员?
 */

/**
 * DataStructures
 */
public class SparseArray {
     
    public static void main(String[] args) {
     
        // 创建一个原始的二维数组
        // 1标识黑子 2标识蓝子
        int chessArr[][] = new int[11][11];
        chessArr[1][2] = 1;
        chessArr[2][3] = 2;
        chessArr[6][8] = 2;
        int num = 0;
        System.out.println("原始二维数组...");
        for (int[] row : chessArr) {
     
            for (int data : row) {
     
                if (data != 0) {
     
                    num++;
                }
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }


        System.out.println("稀疏数组...");
        // 创建稀疏数组
        int sparseArr[][] = new int[num + 1][3];
        sparseArr[0][0] = chessArr.length;
        sparseArr[0][1] = chessArr[1].length;
        sparseArr[0][2] = num;
        int count = 0;
        // 遍历赋值
        for (int i = 0; i < chessArr.length; i++) {
     
            for (int j = 0; j < chessArr[i].length; j++) {
     
                if (chessArr[i][j] != 0) {
     
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr[i][j];
                } else {
     
                    continue;
                }
            }
        }
        // 遍历稀疏数组
        for (int[] row : sparseArr) {
     
            for (int data : row) {
     
                if (data != 0) {
     
                    num++;
                }
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        System.out.println("二维数组已成功转换为稀疏数组... 反过来了");
        // 稀疏数组转换原始二维数组
        // 稀疏数组转换为二维数组
        // 获取原始二维数组的行和列
        int row = sparseArr[0][0];
        int col = sparseArr[0][1];

        // 创建原始二维数组
        int[][] arr2 = new int[row][col];
        // 遍历稀疏数组 从1开始
        for (int i = 1; i < sparseArr.length; i++) {
     
            int[] arr = sparseArr[i];
            // arr[0] 就是二维数组的行
            // arr[1] 就是二维数组的列 
            // arr[2] 就是二维数组指定行列的值
            arr2[arr[0]][arr[1]] = arr[2];
        }


        System.out.println("稀疏数组成功转换为二维数组..");
        for (int[] ints : arr2) {
     
            for (int anInt : ints) {
     
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}

上述代码运行截图如下:
数据结构自学笔记(1)-- 稀疏数组_第3张图片


全面发展,一专多能!!! 如果本文能对你有一点点帮助,本人十分荣幸,文章中出现错误请及时指出,万分感谢!

你可能感兴趣的:(自我学习,数据结构,数组)