public class SparseArray {
public static final int NUM=10;//常量定义数组大小
public int[][] chees ;//表示原数组
public int[][] sparse;//表示稀疏数组
public int[][] chees2;//表示恢复后的数组
public int sum;//记录非零数字个数
//创建一个初始的二维数组
public void setChees(int chees[][]) {
chees[1][2]=1;
chees[2][3]=2;
chees[1][6]=2;
chees[0][0]=2;
}
// 创建对应的稀疏数组
public void cheestosparse(int[][] chees,int sparse[][]) {
//给稀疏数组赋值
sparse[0][0]=NUM;
sparse[0][1]=NUM;
sparse[0][2]=sum;
int count=0;//count用于记录第几个非零数据
for(int i=0;i<NUM;i++) {
for(int j=0;j<NUM;j++) {
if(chees[i][j]!=0) {
count++;
sparse[count][0]=i;
sparse[count][1]=j;
sparse[count][2]=chees[i][j];
}
}
}
}
//将稀疏数组恢复成原始的二维数组
public void sparse2chees(int[][] sparse,int[][] chees2) {
for(int i=1;i<sparse.length;i++) {
chees2[sparse[i][0]][sparse[i][1]]=sparse[i][2];
}
}
//打印数组
public void printArray(int[][] array) {
for(int[] row:array) {
for(int date:row) {
System.out.printf("%d\t",date);
}
System.out.printf("\n");
}
}
//统计棋子的个数
public int count(int[][] array) {
for(int i=0;i<NUM;i++) {
for(int j=0;j<NUM;j++) {
if(array[i][j]!=0) {
sum++;
}
}
}
return sum;
}
public static void main(String[] args) {
SparseArray s = new SparseArray();
s.chees=new int[NUM][NUM];
s.setChees(s.chees);
System.out.println("原始的二维数组");
s.printArray(s.chees);
s.sum=s.count(s.chees);//必须先获取sum值
s.sparse=new int[s.sum+1][3];
s.cheestosparse(s.chees,s.sparse);
System.out.println("得到的稀疏数组");
s.printArray(s.sparse);
s.chees2 = new int[s.sparse[0][0]][s.sparse[0][1]];
s.sparse2chees(s.sparse,s.chees2);
System.out.println("恢复后的二维数组");
s.printArray(s.chees2);
}
}
数组转为稀疏数组
最新推荐文章于 2024-05-31 10:46:10 发布