B站学习数据结构笔记=====>稀疏数组
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B站学习数据结构笔记=====>稀疏数组相关的知识,希望对你有一定的参考价值。
学习来源–>传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法)
程序==数据结构+算法
数据结构包括 线性结构与非线性的结构
线性结构
: 特点;数据元素之间存在着一对一的线性关系;
但是;线性结构又分为顺序存储结构
(顺序表)与链式存储结构
(链表)
- 顺序表:元素连续;
- 链表: 元素不一定连续;元素的节点中会存储数据元素以及相邻的元素的地址信息;
常见线性结构->数组,队列,链表,栈
非线性结构
二维数组;多维数组;广义表;树结构;图结构
比如说有一块棋盘;0表示 没有棋子; 1表示黑子; 2表示 白子;
由于存在着比较多的空位;现在考虑把放了棋子的位置存下来即可;
那么就用稀疏数组; 稀疏数组有3列;第一行分别存入 棋盘的行;棋盘的列 棋盘上棋子的个数;
其他行存放棋子的行列位置和棋子的具体( 黑1 白2);
具体的思路;
- 首先去遍历原来的二维数组棋盘;并且计算出放了棋子的个数 num;
- 然后创建稀疏数组; 稀疏数组的行数为 (num+1) 列数为3;
然后再遍历原二维数组,把放棋子的位置和棋子信息存入稀疏数组
那么得到稀疏数组后,现在还要恢复到原来的二维数组;
- 首先根据稀疏数组的第一行;得到要恢复的数组是几行几列,有几个棋子;
- 然后就是遍历读取稀疏数组的数据,给二维数组放到指定的位置;
具体实现
package day01forarray;
/**
* @author by CSDN@小智RE0
* @date 2021-10-30 20:25
* 稀疏数组
*/
public class XSArray {
public static void main(String[] args) {
//创建二维数组 -->棋盘 0 : 没有放棋子; 1: 黑子; 0 :白子
//本次做一个12*12的棋盘;
int[][] startArray = new int[12][12];
//放入棋子
startArray[0][0] = 2;
startArray[1][10] = 1;
startArray[3][9] = 2;
startArray[4][0] = 2;
startArray[5][6] = 1;
startArray[8][1] = 1;
startArray[10][5] = 2;
startArray[11][11] = 1;
System.out.println("--------------原始棋盘------------------");
//遍历原数组;
for (int[] rows : startArray) {
for (int chess : rows) {
System.out.print(chess+"\\t");
}
//换行;
System.out.println();
}
System.out.println("--------------二维数组转稀疏数组------------------");
//1.遍历原数组;得到放置的棋子个数
//定义标记数值;
int num = 0;
for (int[] ints : startArray) {
for (int anInt : ints) {
if(anInt!=0){
num++;
}
}
}
System.out.println("有效的棋子个数----->"+num);
//2.创建稀疏数组;
int[][] fewArray = new int[num+1][3];
fewArray[0][0] = 12;
fewArray[0][1] = 12;
fewArray[0][2] = num;
//3.将二维数组的值存入稀疏数组;
//这里需要定义计数器进行换行 存值;
int count = 0;
for (int i = 0; i < startArray.length; i++) {
for (int j = 0; j < startArray[i].length; j++) {
if(startArray[i][j]!=0){
count++;
fewArray[count][0]=i;
fewArray[count][1]=j;
fewArray[count][2]=startArray[i][j];
}
}
}
//输出查看稀疏数组;
System.out.println("-----------转换的稀疏数组-------------");
for (int[] ints : fewArray) {
System.out.println(ints[0] + "\\t"
+ ints[1] + "\\t"
+ ints[2] + "\\t"
);
}
//稀疏数组转二维数组还原;
System.out.println("------------稀疏数组转二维数组----------------");
//1.首先读取稀疏数组的第一行;创建二维数组;
int[][] recoverArray = new int[fewArray[0][0]][fewArray[0][1]];
//2.然后由稀疏数组的第二行开始,读取存储数据;
for (int i = 1; i < fewArray.length; i++) {
recoverArray [fewArray[i][0]] [fewArray[i][1]] = fewArray[i][2];
}
//输出恢复数组
System.out.println("-----------恢复后的二维数组--------------------");
for (int[] ints : recoverArray) {
for (int i : ints) {
System.out.print(i+"\\t");
}
//换行
System.out.println();
}
}
}
以上是关于B站学习数据结构笔记=====>稀疏数组的主要内容,如果未能解决你的问题,请参考以下文章