Java数据结构--稀疏数组

package DataStructure;

public class SparseArrays {
    public static void main(String[] args) {
        // 有一个10*10的棋盘,在(0,1)和(1,2)位置分别有一个黑棋和白棋,将这个
        // 棋盘用二维数组表示出来,再将其转换为稀疏数组,最后转换回二维数组
        int Array[][] = new int[10][10];
        Array[0][1] = 1; //用1表示黑棋,2表示白棋
        Array[1][2] = 2;
        System.out.println("---------二维数组---------");
        for (int[] row : Array){
            for (int data:row){
                System.out.print(data+"\t");
            }
            System.out.println();
        }
        int number = 0;  //统计非零的个数
        for (int[] row : Array){
            for (int data : row){
                if (data != 0){
                    number ++;
                }
            }
        }
        int sparseArray[][] = new int[number+1][3];
        sparseArray[0][0] = 10;
        sparseArray[0][1] = 10;
        sparseArray[0][2] = number;
        int index = 1;
        for (int i = 0 ; i < 10 ; i ++){
            for (int j = 0 ; j < 10 ; j ++){
                if (Array[i][j] != 0){
                    sparseArray[index][0] = i;
                    sparseArray[index][1] = j;
                    sparseArray[index][2] = Array[i][j];
                    index ++;
                }
            }
        }
        System.out.println("---------稀疏数组---------");
        for (int[] row : sparseArray){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }
        System.out.println("---------转换为二维数组---------");
        int length = sparseArray[0][0];
        int width = sparseArray[0][1];
        int T = sparseArray[0][2];
        int Array1[][] = new int[length][width];
        for (int i = 1 ; i <= T ; i ++){
            int x = sparseArray[i][0];
            int y = sparseArray[i][1];
            int val = sparseArray[i][2];
            Array1[x][y] = val;
        }
        for (int[] row : Array1){
            for (int data : row){
                System.out.print(data + "\t");
            }
            System.out.println();
        }
    }
}

运行,得到结果

---------二维数组---------
0	1	0	0	0	0	0	0	0	0	
0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
---------稀疏数组---------
10	10	2	
0	1	1	
1	2	2	
---------转换为二维数组---------
0	1	0	0	0	0	0	0	0	0	
0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值