資料結構:稀疏棋盤的實現

奮鬥的小火龍 發表於 2020-09-23

資料結構:
04:程式等於資料結構加上演算法。然後資料結構可以說是演算法的基礎。
06:資料結構的線性結構和非線性結構:線性結構其實指的就是元素之間存在的是1對一的關係,線性結構包括了順序儲存結構還有鏈式儲存結構。順序儲存就是存東西的時候地址是連續的,鏈式的話儲存的地址就不會是連續的了。
07:稀疏陣列:就是如果一個棋盤裡面存在很多0的數值,可以採用稀疏陣列節省空間。稀疏陣列的第一行就是行,列,還有多少個值。

棋盤轉換的具體操作:
在這裡插入圖片描述

程式碼實現:

package sparsearaay;

public class pr {
    public static void main(String[] args) {
        int chessArr[][] =new int[11][11] ;
        //1表示黑子  2表示藍子
        chessArr[1][2] =1;
        chessArr[2][3] =2;
        //上面已經完成了棋盤的佈置
        //建立稀疏陣列   建立sum記錄有多少個有用的資料
        int sum = 0 ;
        for (int i = 0; i <chessArr.length ; i++) {
            for (int j = 0; j <chessArr[i].length ; j++) {
                if ( chessArr[i][j]!=0) {
                    sum++;
                }
            }
        }
        System.out.println(sum); //sum=2
        //建立稀疏陣列
        int sArr[][] =new int[sum+1][3] ;
        sArr[0][0]=11;
        sArr[0][1]=11;
        sArr[0][2]=sum;
        //在稀疏陣列存資料
        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++;
                    sArr[count][0]=i;
                    sArr[count][1]=j;
                    sArr[count][2]=chessArr[i][j];
                }
            }
        }
        for (int i = 0; i <sArr.length ; i++) {
            System.out.println(sArr[i][0]+" "+sArr[i][1]+sArr[i][2]);
        }
        System.out.println("");
        //接下來就是還原了
        int[][] arr2 =new int[sArr[0][0]][sArr[0][1]] ;
        for (int i = 1; i <sArr.length ; i++) {
            arr2[sArr[i][0]][sArr[i][1]]=sArr[i][2];
        }

        //恢復2維陣列
        for (int k = 0; k<arr2.length ; k++) {
            for (int j = 0; j <arr2[k].length ; j++) {
                System.out.print(arr2[k][j]);
            }
            System.out.println(" ");
        }


    }
}

在這裡插入圖片描述