文章目录

  • 一、数据结构组成
    • 1、线性结构
    • 2、非线性结构
  • 二、稀疏数组
    • 1、应用场景:
    • 2、稀疏数组转换的思路分析
    • 3、代码实现
  • 补充:
    • %d\t

一、数据结构组成

包括:线性结构非线性结构

1、线性结构

特点:数据元素之间存在一对一的线性关系

存储结构:

顺序存储:顺序表,存储元素是连续的

链式存储:链表,存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息

常见:数组、队列、链表和栈

2、非线性结构

包括:二维数组、多维数组,广义表,树结构,图结构

二、稀疏数组

1、应用场景:

基本介绍

​ 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

处理方法:

​ (1)记录数组一共有几行几列,有多少个不同的值

​ (2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

2、稀疏数组转换的思路分析

二维数组转稀疏数组的思路

(1)遍历原始的二维数组,得到有效数据的个数sum

(2)根据sum就可以创建稀疏数组spareseArr int[sum+1][3]

(3)将二维数组的有效数据存入到稀疏数组

稀疏数组转原始的二维数组的思路

(1)先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2=int[11][11]

(2)再读取稀疏数组后几行的数据,并赋给原始的二维数组即可。

3、代码实现

//创建一个原始的二维数组11*11
//0:表示没有棋子,1:黑色,2:蓝色
int chessArr [][] = new int[11][11];
chessArr[1][2]=1;chessArr[2][3]=2;
//输出原始的二维数组
System.out.println("原始的二维数组~~");
for (int[] row : chessArr){    for (int data : row){        System.out.printf("%d\t",data);}    System.out.println();
}
//将二维数组转稀疏数组的思路
//1.先遍历二维数组得到非0数据的个数
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="+sum);
//2.创建对应的稀疏数组
int[][] sparseArr = new int[sum+1][3];
//给稀疏数组赋值
sparseArr[0][0]=11;sparseArr[0][1]=11;sparseArr[0][2]=sum;
//遍历二维数组,将非0的值存入稀疏数组
sparseArr中int count = 0;for (int i=0;i<11;i++){    for(int j=0;j<11;j++){        if (chessArr[i][j]!=0){            count++;            sparseArr[count][0]=i;            sparseArr[count][1]=j;            sparseArr[count][2]=chessArr[i][j];        }    }
}
//输出稀疏数组的形式
System.out.println();
System.out.println("得到的稀疏数组为~~");
for (int i=0;i<sparseArr.length;i++){    System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i]  [2]);}
System.out.println();
//将稀疏数组==》恢复成原始的二维数组
/**
* (1)先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的`chessArr2=int[11][11]`
* (2)再读取稀疏数组后几行的数据,并赋给原始的二维数组即可。
*/
//1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
int [][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];
//2.再读取稀疏数组后几行的数据(从第二行开始),并赋给原始的二维数组即可。
for (int i=1;i<sparseArr.length;i++){    chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//输出恢复后的二维数组
System.out.println("恢复后的二维数组~~");
for (int[] row : chessArr2){    for (int data : row){        System.out.printf("%d\t",data);    }    System.out.println();
}

补充:

%d\t

\t代表tab键,一般默认就是8个位置,如果输出“1”的话,它后面会输出7个空格来占满8个位置,输 出“12345678”的话,他就不会输出空格来占位置了。

尚硅谷数据结构和算法01-数据结构介绍和稀疏数组相关推荐

  1. 数据结构与算法入门---数据结构类型

    数据结构与算法入门---数据结构类型 数据的逻辑结构 数据的逻辑结构指数据元素之间的逻辑哦关系(和实现无关) 分类一:线性结构和非线性结构 线性结构:有且只有一个开始结点和一个终端节点,并且所有节点都 ...

  2. 【数据结构与算法】数据结构+算法=程序

    [数据结构与算法]数据结构+算法=程序 数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成.记为:Data_Structure=(D,R)其中D是数据元 ...

  3. 数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数-C-icoding-排序-数据结构

    数组合并 假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法, 将这 n 个数组合并到一个数组,且各元素按升序排列.即实现函数: void merge_arrays(const ...

  4. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  5. [数据结构与算法]-二叉查找树(BLT)介绍及其实现(Java)

    本文欢迎转载,转载前请联系作者,经允许后方可转载.转载后请注明出处,谢谢! http://blog.csdn.net/colton_null 作者:喝酒不骑马 Colton_Null from CSD ...

  6. JAVA数据结构与算法【简单介绍】

    前几天去面一个大厂,面试官特别好,面试官说到,我们的学习不能本末倒置,数据结构和算法是程序的基础,如果数据结构你没有学好,你真正意义上不算会写代码.你的代码是各处粘贴,杂乱无章的. 由于现在大多用JA ...

  7. 0x00000005 3.数据结构和算法 基础数据结构 字符串(上)

    文章目录 基本知识简单总结 模式匹配 最长回文子串 前缀匹配 扩展和补充* C++11常见API References: 字符串也是一个高频考察点. 虽然可以和数组考点合并,但由于该场景许多优化空间大 ...

  8. 数据结构与算法学习笔记(python)——第一节 数组应用程序实战

    前言 本人是一个长期的数据分析爱好者,最近半年的时间的在网上学习了很多关于python.数据分析.数据挖掘以及项目管理相关的课程和知识,但是在学习的过程中,过于追求课程数量的增长,长时间关注于学习了多 ...

  9. java set第n位_数据结构与算法——常用数据结构及其Java实现

    本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...

最新文章

  1. float向u8和s8的转换
  2. svn 源码版本控制使用体会
  3. POJ2594 最小路径覆盖
  4. 开源库的使用方法以及libjpeg的移植详解
  5. maven-eclipse 中index.html页面乱码
  6. eShopOnContainers 知多少[9]:Ocelot gateways
  7. web开发者工具,261页前端面试题宝典,通用流行框架大全
  8. 5895. 获取单值网格的最小操作数
  9. 微服务架构和SOA的区别
  10. 不懂别瞎搞!Redis 性能优化的 13 条军规!
  11. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数
  12. c语言c 的区别,C语言与C++的区别
  13. Fedora server wifi
  14. EPLAN史上最全部件库,官网下载,部件宏,EDZ格式
  15. 刚入行的软件测试工程师如何自学软件测试?
  16. date设置时间提示:Local time zone must be set--see zic manual page 2018
  17. bat 链接mysql数据库_使用bat脚本进行数据库操作
  18. KOOCAN非正常电影排行榜之这个丧尸不太冷
  19. xp系统电脑如何链接宽带连接服务器,WinXP设置开机自动宽带连接的方法
  20. 【DeepDive Tutorial 】Extracting mentions of spouses from the news

热门文章

  1. 如何将一张图片贴到另一张图片上
  2. 聚观早报 | 黑五电子产品销售额飙升;谷歌不满微软收购动视暴雪
  3. springboot2.彩色日志配置(自用配置ok)
  4. 登入註冊頁面(Login/Signup)
  5. 安装Ubuntu13.10 - Saucy Salamander(活泼的蝾螈)后的首要事情
  6. Python教程之开胃菜
  7. python顺序执行多个脚本_一个脚本调用多个脚本依次执行
  8. invalid mode 报错
  9. 北京尚学堂python培训到底怎么样
  10. 百囚犯问题(100 prisoners problem)