前言
用java实现二维数据和稀疏数组之间的转换
1. 需求和思路分析
1.1 以二维数组的格式模拟棋盘、地图等类似的二维结构为基础,与稀疏数组之间进行转化。
1.2 思路分析
二维数组转化为稀疏数组
- 遍历原始的二维数组,得到有效数据个数 sum
- 根据sum就可以创建稀疏数组sparsearr int[sunm+1][3]
- 将二维数组的有效数据存入到稀疏数组
稀疏数组转为二维数组
- 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
- 再读取稀疏数组后几行的数据,并赋给原始的二维数组即可。
2.代码实现和展示
2.1 二维数组与稀疏数组之间的转化程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
public class sparsearr {
public static void main(string[] args) {
// 创建一个原始的二维数组 11 * 11
// 0: 没有棋子;1:黑棋;2:白棋
int [][] chessarr = new int [ 11 ][ 11 ];
chessarr[ 1 ][ 2 ] = 1 ;
chessarr[ 2 ][ 3 ] = 2 ;
chessarr[ 2 ][ 6 ] = 1 ;
// 打印输出原始二维数组
system.out.print( "原始二维数组为:\n" );
for ( int [] a : chessarr ){
for ( int item : a ){
system.out.printf( "%d\t" , item );
}
system.out.println();
}
//将二维数组转换为稀疏数组思路
// 1、遍历二维数组,统计有效数据的个数sum
int sum = 0 ;
for ( int i= 0 ;i < chessarr.length;i++){
for ( int j= 0 ;j < chessarr[ 0 ].length;j++){
if (chessarr[i][j] != 0 ){
sum++;
}
}
}
system.out.println( "有效数据的个数为:" + sum);
//2、建立稀疏数组,行列值
int [][] sparsearr = new int [sum+ 1 ][ 3 ];
//3、遍历原始二维数组转换为稀疏数组中的数据
sparsearr[ 0 ][ 0 ] = 11 ;
sparsearr[ 0 ][ 1 ] = 11 ;
sparsearr[ 0 ][ 2 ] = sum;
int count= 1 ;
for ( int i= 0 ;i < 11 ;i++){
for ( int j= 0 ;j < 11 ;j++){
if (chessarr[i][j] != 0 ){
sparsearr[count][ 0 ] = i;
sparsearr[count][ 1 ] = j;
sparsearr[count][ 2 ] = chessarr[i][j];
count++;
}
}
}
//4 输出稀疏数组
system.out.println( "稀疏数组为:" );
for ( int [] row : sparsearr) {
// for (int data : row) {
// system.out.printf( "%d\t",data);
// }
// system.out.println();
// }
system.out.printf( "%d\t%d\t%d\t\n" , row[ 0 ],row[ 1 ],row[ 2 ]);
}
// 将稀疏数组转化为二维数组
// 1.读取稀疏数组首行数据,建立二维数组
int [][] chessarr2 = new int [sparsearr[ 0 ][ 0 ]][sparsearr[ 0 ][ 1 ]];
// 2. 遍历稀疏数组,赋值给二维数组
for ( int i= 1 ;i < sparsearr.length;i++) {
chessarr2[sparsearr[ 1 ][ 0 ]][sparsearr[ 1 ][ 1 ]] = sparsearr[i][ 2 ];
}
// 3. 打印输出原始的二维数组
system.out.print( "原始二维数组为:\n" );
for ( int [] row : chessarr2) {
for ( int data : row) {
system.out.printf( "%d\t" , data);
}
system.out.println();
}
}
}
|
2.2 二维数组转化为稀疏数组展示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
原始二维数组为:
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 1 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 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
有效数据的个数为: 3
稀疏数组为:
11 11 3
1 2 1
2 3 2
2 6 1
原始二维数组为:
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 1 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 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
|
3. 总结
用java语言实现二者之间的转化,思路很重要,按着思路写代码就会很省事,难的点可能是不知道如何写代码。
注意:printf 和 print 输出的格式不同。
参考视频
尚硅谷java数据结构与java算法(java数据结构与算法)
到此这篇关于java实现二维数组和稀疏数组之间的转换的文章就介绍到这了,更多相关java 二维数组和稀疏数组转换内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_45063703/article/details/118255333