数据结构复习笔记(一)–稀疏数组
介绍
在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵。
如:
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 10 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
1 0 1 5 0 0 0 6 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
转化存储后:
11 11 7
1 2 1
2 3 2
3 5 10
5 0 1
5 2 1
5 3 5
5 7 6
实现代码
public static void main(String[] args) {
int[][] Arr = new int[6][5];
Arr[0][3] = 2;
Arr[1][4] = 7;
Arr[2][4] = 4;
Arr[4][1] = 4;
//原始数组先并统计有效数据个数
int sum = 0;
System.out.println("原始数组:");
for(int i =0;i<Arr.length;i++){
for(int j=0;j<Arr[0].length;j++){
System.out.print(Arr[i][j]+"\t");
if(Arr[i][j]!=0) sum++;
}
System.out.println();
}
System.out.println("有效数据个数:"+sum);
//稀疏矩阵初始化(最前面一行保存行,列,有效数据个数)
int[][] spareArr = new int[sum+1][3];
spareArr[0][0] = Arr.length;
spareArr[0][1] = Arr[0].length;
spareArr[0][2] = sum;
//生成稀疏矩阵
int index = 1;
for(int i =0;i<Arr.length;i++){
for(int j=0;j<Arr[0].length;j++) {
if (Arr[i][j] != 0) {
spareArr[index][0] = i;
spareArr[index][1] = j;
spareArr[index][2] = Arr[i][j];
index++;
}
}
}
//打印稀疏矩阵
System.out.println("稀疏矩阵转化存储后:");
for(int i =0;i<spareArr.length;i++) {
for (int j = 0; j < spareArr[0].length; j++)
System.out.print(spareArr[i][j] + "\t");
System.out.println();
}
}
结果
原始数组:
0 0 0 2 0
0 0 0 0 7
0 0 0 0 4
0 0 0 0 0
0 4 0 0 0
0 0 0 0 0
有效数据个数:4
稀疏矩阵转化存储后:
6 5 4
0 3 2
1 4 7
2 4 4
4 1 4