一、原始数组转稀疏数组
package Time_03_31;
import java.util.Scanner;
public class homeWork_SparceArray {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//创建原始数组的关键数据,(也是稀疏数组的第一行的三元素)
int width,height,num;
System.out.println("请输入行数:");
height=sc.nextInt();
System.out.println("请输入列数:");
width= sc.nextInt();
System.out.println("请输入有效数据个数:");
num=sc.nextInt();
int[][] sparceArr=new int[height][width];
//根据之前的有效数据个数,设置的有效数据
sparceArr[1-1][8-1]=101;
sparceArr[9-1][5-1]=201;
sparceArr[4-1][7-1]=301;
//遍历输出
System.out.println("原数组如下:");
for(int[] row:sparceArr){
for(int data:row){
System.out.print(data+"\t");
}
System.out.println();
}
//创建稀疏数组,num+1是因为第一行被关键信息占用了(所以行数+1),
3则是代表关键三元素具体信息(套路)
int[][] sparceArr2 =new int[num+1][3];
//首先把第一行完善
sparceArr2[0][0]=height;
sparceArr2[0][1]=width;
sparceArr2[0][2]=num;
//计数器count,(而不能使用i)
int count=1;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
if(sparceArr[i][j]!=0){
sparceArr2[count][0]=i;
sparceArr2[count][1]=j;
sparceArr2[count][2]=sparceArr[i][j];
count++;
}
}
}
//遍历输出
System.out.println("稀疏数组如下:");
for(int i=0;i<num+1;i++){
for (int j=0;j<3;j++){
System.out.print(sparceArr2[i][j]+"\t");
}
System.out.println();
}
二、稀疏数组转原始数组
//下面这个格式有点怪,(两个下标利用的是稀疏数组第一行关键信息,代表着原始数组的行数和列数)
int[][] sparceArr3=new int[sparceArr2[0][0]][sparceArr2[0][1]];
//利用的是稀疏数组第一行关键信息,有效数据个数
for(int i=1;i<=sparceArr2[0][2];i++){
sparceArr3[sparceArr2[i][0]][sparceArr2[i][1]]=sparceArr2[i][2];
}
//遍历输出
System.out.println("还原数组如下:");
for(int[] row:sparceArr3){
for (int data:row){
System.out.print(data+"\t");
}
System.out.println();
}
}
三、最后附上完整代码
package Time_03_31;
import java.util.Scanner;
public class homeWork_SparceArray {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//创建原始数组的关键数据,(也是稀疏数组的第一行的三元素)
int width,height,num;
System.out.println("请输入行数:");
height=sc.nextInt();
System.out.println("请输入列数:");
width= sc.nextInt();
System.out.println("请输入有效数据个数:");
num=sc.nextInt();
int[][] sparceArr=new int[height][width];
//根据之前的有效数据个数,设置的有效数据
sparceArr[1-1][8-1]=101;
sparceArr[9-1][5-1]=201;
sparceArr[4-1][7-1]=301;
//遍历输出
System.out.println("原数组如下:");
for(int[] row:sparceArr){
for(int data:row){
System.out.print(data+"\t");
}
System.out.println();
}
//创建稀疏数组,num+1是因为第一行被关键信息占用了(所以行数+1),3则是代表关键三元素具体信息(套路)
int[][] sparceArr2 =new int[num+1][3];
//首先把第一行完善
sparceArr2[0][0]=height;
sparceArr2[0][1]=width;
sparceArr2[0][2]=num;
//计数器count,(而不能使用i)
int count=1;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
if(sparceArr[i][j]!=0){
sparceArr2[count][0]=i;
sparceArr2[count][1]=j;
sparceArr2[count][2]=sparceArr[i][j];
count++;
}
}
}
//遍历输出
System.out.println("稀疏数组如下:");
for(int i=0;i<num+1;i++){
for (int j=0;j<3;j++){
System.out.print(sparceArr2[i][j]+"\t");
}
System.out.println();
}
//下面这个格式有点怪,(两个下标利用的是稀疏数组第一行关键信息,代表着原始数组的行数和列数)
int[][] sparceArr3=new int[sparceArr2[0][0]][sparceArr2[0][1]];
//利用的是稀疏数组第一行关键信息,有效数据个数
for(int i=1;i<=sparceArr2[0][2];i++){
sparceArr3[sparceArr2[i][0]][sparceArr2[i][1]]=sparceArr2[i][2];
}
//遍历输出
System.out.println("还原数组如下:");
for(int[] row:sparceArr3){
for (int data:row){
System.out.print(data+"\t");
}
System.out.println();
}
}
}