1. 程式人生 > 其它 >JAVA稀疏陣列

JAVA稀疏陣列

package 擴充套件;

public class Demo3<sout> {
/**
* 稀疏陣列一種資料結構
* 記錄原始座標大小及有效值
*/
public static void main(String[] args) {
//1.建立一個二維陣列 11*11 0表示沒有棋子 1表示黑棋 2表示白棋
int[][] array1 = new int[11][11];//11*11二維陣列的格子 沒有賦值
array1[1][2] = 1;//1行2列的位置賦值1
array1[2][3] = 2;
//輸出原始陣列
System.out.println("輸出原始陣列");
for (int[] ints:array1){
for (int anInt : ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
//轉換稀疏陣列儲存
//獲取有效值個數
int sum=0;
for (int i = 0; i < 11; i++) {//11.fro快捷 i=0<11自增
for (int j = 0; j < 11; j++) {
if(array1[i][j]!=0);
sum++;//總計到底多少個值
}
}
System.out.println("有效值個數:"+sum);
//2.建立一個稀疏陣列的陣列
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;//賦值,存了多少行
array2[0][1] = 11;//列
array2[0][2] = sum;//值

//遍歷二維陣列,將非零的值存入稀疏陣列
int count = 0;//定義
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array1[i].length; j++) {
if(array1[i][j]!=0);
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];//行列值
}

}
//輸出稀疏陣列
System.out.println("稀疏陣列");
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
}
System.out.println("還原");
//1.讀取稀疏陣列
int[][] array3 = new int[array2[0][0]][array2[0][1]];//int[array2[0][0]]行[array2[0][1]]列
//2.給其中的元素還原值
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] =array2[i][2] ;//橫縱座標賦值
//3.列印
System.out.println("輸出還原陣列");
for (int[] ints : array3){
for (int anInt : ints){
System.out.println(anInt+"\t");
}
System.out.println();
}

}
}
}