数据结构1——原始数组和稀疏数组的互相转化

86 阅读1分钟
package 稀疏数组;

public class 稀疏数组的代码实现 {
    public static void main(String[] args) {
//        原始二维数组
        int chessArr1[][] = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
//      原始二维数组
//        for(int [] row :chessArr1){
//            for(int data :row){
//                System.out.printf("%d\t",data);
//            }
//            System.out.println();
//        }
        int sum = 0;
//        遍历出数据个数
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr1[i][j] != 0){
                    sum++;
                }
            }
        }
//        System.out.println(sum);
//        稀疏数组 行为数据个数加一 列依次存储数据在二维数组的行 列 数据值 特别的是第一行的数据值为二维数组的数据个数
        int sparseArr [][] = new int[sum+1][3];
//        稀疏数组的初始行数为0
        int count = 0;
//        存储原始数组的行数
        sparseArr[count][0] = 11;
//        存储原始数组的列数
        sparseArr[count][1] = 11;
//        存储原始数组的数据数
        sparseArr[count][2] = sum;
        //存储完第一行数据 行数加一
        count++;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr1[i][j] != 0){
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                    count++;
                }
            }
        }
//        输出稀疏数组
//        for(int [] row :sparseArr){
//            for(int data :row){
//                System.out.printf("%d\t",data);
//            }
//            System.out.println();
//        }
        
//        取出原始数组行列数
        int row = sparseArr[0][0];
        int col = sparseArr[0][1];
        int chessArr2 [][] = new int[row][col];
//        还原数据位置
        for (int i = 1; i < sum+1; i++) {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        //      恢复二维数组
        for(int [] rows :chessArr2){
            for(int data :rows){
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }
    }
}