32-稀疏数组







稀疏数组

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

  • 稀疏数组的处理方式是

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

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

  • 以下为 转换稀疏数组 和 还原稀疏数组的代码

    public class Demo_07 {
        public static void main(String[] args) {
            //创建二维数组 0代表没有棋子 1代表黑棋 2代表白棋
            int[][] arrays_01 = new int[11][11];  //新建一个棋盘
            arrays_01 [1][2] = 1;  //随机定义黑棋
            arrays_01 [2][3] = 2;  //随机定义白棋
            System.out.println("输出原始数据");  //输出原始棋盘
            for (int[] ints : arrays_01) {  //遍历循环 arrays_01
                for (int anInt : ints) {
                    System.out.print(anInt + "\t");  //输出 arrays_01的所有数值
                }
                System.out.println();  //换行
            }
            System.out.println("==========================");
            //转换为稀疏数组保存
            //先获取有效值的个数
            int sum = 0;  //定义并归零有效值
            for (int i = 0; i < arrays_01.length; i++) {  //循环行
                for (int j = 0; j < arrays_01[i].length; j++) {  //循环列
                    if (arrays_01[i][j] != 0) {  //判断当前是否不等于0
                        sum++;  //如果不等于0 sum +1
                    }
                }
            }
            System.out.println(sum);  //打印出有效值总数
            //创建一个稀疏数组的数组
            int[][] arrays_02 = new int[sum + 1][3];  //声明并赋值一个稀疏数组待用
            arrays_02 [0][0] = arrays_01.length;  //将 arrays_01的行数 赋值到 arrays_02 的 0,0
            arrays_02 [0][1] = arrays_01[0].length;  //将 arrays_01 的列数 赋值到 arrays_02 的 0,1
            arrays_02 [0][2] = sum;  //将有效数数量赋值到 arrays_02 的 0,2
            //遍历二维数组,将非零的值存放稀疏数组中
            int count = 0;  //声明并归零 count
            for (int i = 0; i < arrays_01.length; i++) {  //循环 arrays_01的行
                for (int j = 0; j < arrays_01[1].length; j++) {  //循环 arrays_01 的列
                    if (arrays_01[i][j] != 0) {  //判断当前元素的值是否不等于 =
                        count++;  //当前已记录有效值的数量+1
                        arrays_02[count][0] = i;  //arrays_02 的 count,0 等于当前 arrays_01 的有效元素的行
                        arrays_02[count][1] = j;  //arrays_02 的 count,1 等于当前 arrays_01 的有效元素的列
                        arrays_02[count][2] =arrays_01[i][j];  //arrays_02 的 count,2 等于当前 arrays_01 的有效元素的值
                    }
                }
            }
            //输出稀疏数组
            for (int[] ints : arrays_02) {  //遍历 arrays_02
                for (int anInt : ints) {
                    System.out.print(anInt + "\t");  //输出arrays_02 的元素
                }
                System.out.println();  //换行
            }
            System.out.println("=============================");
            //还原稀疏数组
            int[][] arrays_03 = new int[arrays_02[0][0]][arrays_02[0][1]];  //声明一个数组并将行列赋值为 arrays_02 的0,0 和 0,1
            for (int i = 1; i < arrays_02.length; i++) {  //循环小于 arrays_02 的成员数
                arrays_03[arrays_02[i][0]][arrays_02[i][1]] = arrays_02[i][2];  //还原稀疏数组
            }
            for (int[] ints : arrays_03) {  //遍历 arrays_03
                for (int anInt : ints) {
                    System.out.print(anInt + "\t");  //输出 arrays_03
                }
                System.out.println();  //换行
            }
        }
    }


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇