當前位置:
首頁 >
数据结构与算法 - 稀疏数组(理解+代码实现案例)
發布時間:2023/12/10
27
豆豆
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法 - 稀疏数组(理解+代码实现案例)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
舉例
稀疏數組第一行是原數據幾行幾列和幾個有效數據的個數
下面的行是各個有效數組的行列與具體值
稀疏數組實現
代碼實現
package DataStructures.sparsearray;/*** 二維數組轉稀疏數組 與 稀疏數組轉成二維數組*/ public class SparseArray {public static void main(String []args){//創建一個原始二維數組11*11//0:表示沒有棋子,1:表示黑色棋子 , 2:表示藍色棋子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 2;//輸出一下原數組for (int[] row : chessArr1){for (int data : row){System.out.printf("%d\t",data);}System.out.println();/*** 結果:* 0 0 0 0 0 0 0 0 0 0 0* 0 0 1 0 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 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*/}//將二維數組 轉 稀疏數組的思路//1.先遍歷二維數組,得到非0數據的個數int sum = 0;for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {sum++;}}}// System.out.println(sum); //2//2.創建對應的稀疏數組int sparseArr[][] = new int[sum+1][3];//給稀疏數組第一行數據sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;//把非0值存放到稀疏數組中int count = 0; //用于記錄是第幾個非0數據for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//輸出稀疏數組的形式System.out.println();System.out.println("得到的洗漱數組~~~~~~~~~~~");for (int i = 0; i<sparseArr.length;i++){for (int j = 0; j<sparseArr[0].length; j++){System.out.print(sparseArr[i][j]+"\t");}System.out.println();/*** 結果:* 得到的洗漱數組~~~~~~~~~~~* 11 11 3* 1 2 1* 2 3 2* 4 5 2*/}//將稀疏數組 --》 恢復成 原始的 二維數組/*** 1、先讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組* 2.再讀取稀疏數組后幾行的數據,并賦給 原始二維數組 即可。*/// 1.想讀取稀疏數組的第一行,根據第一行的數據,創建原始的二維數組int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];//遍歷稀疏數組 ,從稀疏數組的第二行開始for (int i = 1; i<sparseArr.length;i++){chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];}//輸出恢復后的稀疏數組for (int i = 0; i<chessArr2.length;i++){for (int j = 0; j<chessArr2[0].length; j++){System.out.print(chessArr2[i][j]+"\t");}System.out.println();/*** 結果:* 0 0 0 0 0 0 0 0 0 0 0* 0 0 1 0 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 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*/}} }總結
以上是生活随笔為你收集整理的数据结构与算法 - 稀疏数组(理解+代码实现案例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PWN-PRACTICE-BUUCTF-
- 下一篇: centos7安装telnet后/etc