忻10.25 数据结构中的稀疏数组(Java) 及遍历二维数组的代码
知识点:1.Java语言的稀疏数组
2.Java语言中遍历二维数组的代码要求
//数据结构之稀疏数组
public class SparseArray{
public static void main(String[] args){
/*
* 创建一个原始的二维数组11*11
* 0:表示没有棋子,1:表示小黑子,2:表示小白子
*/
int[][] chessArr1=new int[11][11];
chessArr1[1][2]=1;
chessArr1[3][4]=2;
//输出原始的二维数组(遍历二维数组)
System.out.println("---------输出原始二维数组----------");
for(int[] row:chessArr1){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println(" ");
}
/*
* 二维数组--> 稀疏数组
*/
//1.先遍历二维数组,得到非零数据的个数 sum
int sum=0;
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1[i].length;j++){
if(chessArr1[i][j]!=0){
sum++;
}
}
}
//2.创建稀疏数组
int[][] sparseArray=new int[sum+1][3];
// 给稀疏数组赋值
sparseArray[0][0]=11;
sparseArray[0][1]=11;
sparseArray[0][2]=sum;
//遍历二维数组,将非0值存入sparseArray中
int count=0;//count用于计数看是第几个非0值
for(int i=0;i<chessArr1.length;i++){
for(int j=0;j<chessArr1[i].length;j++){
if(chessArr1[i][j]!=0){
count++;
sparseArray[count][0]=i;//行
sparseArray[count][1]=j;//列
sparseArray[count][2]=chessArr1[i][j];//非0值
}
}
}
//输出稀疏数组
System.out.println("---------输出稀疏数组----------");
for(int[]row:sparseArray){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println(" ");
}
}
}
---------输出原始二维数组----------
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 0 0 0 0 0 0 0 0
0 0 0 0 2 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
---------输出稀疏数组----------
行 列 值
11 11 2
1 2 1
3 4 2
稀疏数组的运用
当一个数组中大部分元素为0或大部分为同一个值的数组,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法:
1.第一行 记录数组一共有几行几列,有多少个不同的值
2.后面的行 记录数组各个不同的值的 行,列,值
eg:例子中第一行的 11 11 2 代表数组有11行11列,有2个不同的值
第二行的 1 2 1 代表数组chessArr1[1][2]=1
其中涉及到新知识:遍历数组(输出数组的值)
for(int[] row:chessArr1){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println(" ");//换行
}
int[] row : chessArr1
→ 每次循环, row 会拿到 chessArr1 的一行(比如第 0 行 {0, 0, 0} )。
int data : row
→ 每次循环, num 会拿到当前行( row )里的一个数字(比如 0、0、0)。
System.out.print(num + " ")
→ 打印当前数字(比如 0),后面加个空格分隔。
System.out.println()
→ 每打印完一行后换行,这样下一行会从新的一行开始打印
更多推荐



所有评论(0)