数据结构 大体上分为了 线性结构和非线性结构
如果再细分,可以把非线性结构分为 图 和 树,多维数组(2维以上),再加上集合(一般不研究)
线性结构
1.数据元素之间存在一对一的关系
2.数据存储有两种方式,顺序存储(一维数组)和链式存储(链表),
其中顺序存储的叫做线性表,存储的元素物理上是连续的,链式存储的叫做链表,物理上不一定连续
3.常见的线性结构
数组,链表,栈,队列
数组
稀疏数组:当一个数组里面大部分的值都一样的时候,可以使用稀疏数组(列永远是3)
只记录不同值所在的行,列,以及值(存到一个更小的数组中),以及原数组的大小和不同值的个数
比如五子棋
左边是正常数组 右边是稀疏数组,右边的意思是
上边的红框存储原数组的大小和有不同的值的个数,下边的红框表示第0行第2列有一个值为1的数据 同理 第0行第3列有一个值为2的数据........
这样存储的容量小于左边的
二维转稀疏
获得当前不同值的个数(遍历)n
创建稀疏数组 int [n+1] [3]
保存数据,第一行一定是二维数组的行,列,n
稀疏转二维
先读取第一行,获得n行,m列值 创建二维数组 int [n] [m]
去读后边的数据
public class MainTest { public static void main(String[] args) { //直接赋值 int[][] arr1={{0,0,0,0,0},{1,0,4,0,51},{0,0,0,0,0},{0,0,0,0,0},{0,0,0,0,0}}; //创建一个对象 /* int[][] arr2=new int[5][5]; arr2[1][0]=1; arr2[1][2]=4; arr2[1][4]=51;*/ //打印arr1 System.out.println("二维数组:"); for(int[] row:arr1) { for (int i : row) { System.out.print(i); System.out.print(" "); } System.out.println(); } //遍历arr1二维数组 int count=0; for(int i=0;i<arr1.length;i++){ for(int j=0;j<arr1[i].length;j++){ if(arr1[i][j]!=0) count++; } } //创建稀疏数组 行为个数+1 int[][] arrmix=new int[count+1][3]; arrmix[0][0]=5; arrmix[0][1]=5; arrmix[0][2]=count; //把二维数组的值存入 //稀疏数组的行 第0行已经存过数据了,从第一行开始 int n=1; for(int i=0;i<arr1.length;i++){ for(int j=0;j<arr1[i].length;j++){ if(arr1[i][j]!=0) { arrmix[n][0] = i; arrmix[n][1] = j; arrmix[n][2] = arr1[i][j]; n++; } } } //打印稀疏数组 System.out.println("稀疏数组:"); /*System.out.println(arrmix[0][0]); System.out.println(arrmix[0][1]); System.out.println(arrmix[0][2]);*/ for(int[] row:arrmix) { for (int i : row) { System.out.print(i); System.out.print(" "); } System.out.println(); } //恢复为二维数组 int[][] arr2=new int[arrmix[0][0]][arrmix[0][1]]; for(int i=1;i<count+1;i++){ arr2[arrmix[i][0]][arrmix[i][1]]=arrmix[i][2]; } System.out.println("打印恢复后的"); for(int[] row:arr2){ for(int i:row){ System.out.print(i); System.out.print(" "); } System.out.println(); } } }
打印结果
------------------------------------------未完待续,继续补充---------------------------------------------------------------
原文地址:https://www.cnblogs.com/fjd-1004/p/11027215.html
时间: 2024-10-15 10:30:01