目录
一、数据结构
数据结构分为 线性结构 和 非线性结构
线性结构:数据元素之间存在一对一的线性关系,例如数组、队列、链表和栈。
线性结构又分为顺序存储和链式存储,其中链式存储中的元素不一定是连续的。
非线性结构:二维数组、广义表、树结构、图结构。
二、稀疏数组的概念
稀疏数组的处理方法是:
- 记录数组一共有几行几列, 有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中, 从而缩小程序的规模
三、二维数组和稀疏数组的转换
public class SparseArray {
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[4][5] = 1;
System.out.println("原始数组");
printArr(chessArr);
//将二维数组 转 稀疏数组
// 第一步得到非零数的个数
int sum =0;
for(int i=0; i<11; i++){
for(int j=0; j<11; j++){
if(chessArr[i][j]!=0){
sum++;
}
}
}
System.out.println("非零数的个数:"+sum);
// 第二步构造稀疏数组大小
int sparseArr[][] = new int[sum+1][3];
sparseArr[0][0] =11;
sparseArr[0][1] =11;
sparseArr[0][2] =sum;
// 第三步再遍历赋值
int l=1;
for(int i=0; i<11; i++){
for(int j=0; j<11; j++){
if(chessArr[i][j]!=0){
sparseArr[l][0]= i;
sparseArr[l][1]= j;
sparseArr[l][2]= chessArr[i][j];
l++;
}
}
}
printArr(sparseArr);
//稀疏数组 转回 原二维数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i=1; i<sparseArr.length; i++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
printArr(chessArr2);
}
public static void printArr(int[][] arr){
for(int[] row : arr){
for(int data : row){
System.out.printf("%d\t", data); //制表符号/t表示
}
System.out.println();
}
}
}