数组
数据结构分为线性结构和非线性结构
1.线性结构分为顺序存储和链表存储,常见的线性结构有一维数组和链表,队列,栈
2.非线性结构有二维数组,多维数组,广义表,树,表
1.一维数组是顺序存储结构,在内存中的地址是连续的,链表是通过指针进行连接,地址不连续
二维数组转换成稀疏数组
package com.scholar;
import static javafx.scene.input.KeyCode.I;
import static javafx.scene.input.KeyCode.SOFTKEY_0;
/**
* //@auther huhuho
* //@date 2022/4/25 11:31
*/
public class Array {
public static void main(String[] args) {
//new一个二维数组,int型的
int count=0;//有效值个数
int sum=0;//有效值
//int array1[][] = new int[11][11]和int[][] array1 = new int[11][11]没区别,看自己喜好
int array1[][] = new int[11][11];
array1[1][2]=1;
array1[2][3]=2;
//输出原始数组
System.out.println("这是原始数组");
for (int[] row:array1){
for (int data:row){
System.out.printf("%d\t",data);//将数组的值遍历输出,直接输出数组会报[I@1b6d3586,I代表是int型,b6d3586是哈希值
}
System.out.println();
}
// 得到有效值个数
System.out.println("有效值个数");
for (int i=0;i<11;i++){
for (int j=0;j<11;j++){
if (array1[i][j]!=0){
count++;
}
}
}
System.out.println(count);
//输出稀疏数组
System.out.println("这是稀疏数组");
int sparseArr[][]=new int[count+1][3];//稀疏数组的行列数,count+1是因为第二行开始才是有效值
//对稀疏数组第一行进行赋值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=count;
for (int i=0;i<11;i++){
for (int j=0;j<11;j++){
if (array1[i][j]!=0){
//遍历数组中所有的数,并对值不为0的值赋给 sparseArr
sum++;
sparseArr[sum][0]=i;//赋值行
sparseArr[sum][1]=j;//赋值列
sparseArr[sum][2]=array1[i][j];//赋值value
}
}
}
for (int[] row:sparseArr){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//读取稀疏数组第一行的数,生成array2
int array2[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
// 有效值的行数开始值i为1,将sparseArr的值赋给array2,这里是将sparseArr的第一列作为array2的横坐标,第二列作为纵坐标
for (int i=1;i<sparseArr.length;i++){
array2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
System.out.println("稀疏数组还原成原始数组");
for (int[] row:array2){
for (int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
print:不换行输出
println:换行输出
printf:格式化输出,%d是以十进制输出,\t相当于空格,\n相当于换行