数据结构与算法之稀疏数组
2021-03-31 12:24
标签:otf leo ati 直接 bsp not fileinput oid txt 可以把稀疏数组理解为只保存有效数据的一种数组,其针对的自然是有大量无用数据的数组。直接上图 原数组 稀疏数组 稀疏数组第一行类似于表格的表头,依次代表原数组的行数、列数、非零数个数(用零代表无用数据)。第一行之下的每一行都代表有一个非零数,第一列的数字代表非零数的行下标(数组下标从0开始),第二列数字代表非零数的列下标,第三列数就是非零数的实际值。 数据结构与算法之稀疏数组 标签:otf leo ati 直接 bsp not fileinput oid txt 原文地址:https://www.cnblogs.com/qsbnj/p/13567890.html1.简单理解稀疏数组
2.用Java代码实现普通二维数组到稀疏数组的转换及其逆过程
1 public class SparseArray {
2 public static void main(String[] args) throws IOException, ClassNotFoundException {
3 //创建一个二维数组
4 int arr1[][] = new int[11][11];
5 arr1[1][2] = 1;
6 arr1[2][3] = 2;
7 arr1[2][4] = 1;
8
9 //输出打印
10 System.out.println("新的二维数组:");
11 for (int[] rows : arr1) {
12 for (int i : rows) {
13 System.out.print(i+"\t");
14 }
15 System.out.println();
16 }
17 System.out.println();
18
19 //获取二维数组的行数、列数
20 int rowNum = arr1.length;
21 int colNum = arr1[0].length;
22 //获取非零数个数
23 int valNum = 0;
24 for (int[] rows : arr1) {
25 for (int i : rows) {
26 if (i != 0){
27 valNum++;
28 }
29 }
30 }
31
32 //依照获取的数据创建一个稀疏数组
33 int sparseArr[][] = new int[valNum+1][3];
34
35 //设置第一行数据
36 sparseArr[0][0] = rowNum;
37 sparseArr[0][1] = colNum;
38 sparseArr[0][2] = valNum;
39
40 //计数器
41 int count = 0;
42 for (int i = 0; i ) {
43 for (int j = 0; j ) {
44 if (arr1[i][j] != 0){
45 count++;
46 //第n个非零数在稀疏数组中的行下标为n+1
47 sparseArr[count][0] = i;
48 sparseArr[count][1] = j;
49 sparseArr[count][2] = arr1[i][j];
50 }
51 }
52 }
53
54 //打印稀疏数组
55 for (int[] rows : sparseArr) {
56 for (int i : rows) {
57 System.out.print(i+"\t");
58 }
59 System.out.println();
60 }
61 System.out.println();
62
63 //用对象输出流写入文件中
64 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\Files\\test\\sparseArr.txt"));
65 oos.writeObject(sparseArr);
66
67 //用对象输入流读入文件中的对象
68 ObjectInputStream ois = new ObjectInputStream(new FileInputStream("G:\\Files\\test\\sparseArr.txt"));
69 int[][] sparseArr2 = (int[][]) ois.readObject();
70
71 //打印验证数据还原
72 System.out.println("还原的稀疏数组:");
73 for (int[] rows : sparseArr2) {
74 for (int i : rows) {
75 System.out.print(i+"\t");
76 }
77 System.out.println();
78 }
79 System.out.println();
80
81
82 //将稀疏数组还原为原来的二维数组
83 int arr2[][] = new int[sparseArr2[0][0]][sparseArr2[0][1]];
84 for (int i = 1; i ) {
85 arr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];
86 }
87
88 //再次打印验证
89 for (int[] rows : arr2) {
90 for (int i : rows) {
91 System.out.print(i+"\t");
92 }
93 System.out.println();
94 }
95
96 }
97 }
上一篇:AutoCAD C#二次开发