稀疏数组
数据结构
数据结构是指数据相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储、组织数据的方式。
-
线性结构:最常用的数据结构,特点是单个数据之间存在一对一的线性关系。包含两种不同的存储结构:顺序存储结构和链式存储结构。
顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的。
链式存储的线性表被叫做链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
线性结构常见的有:数组、队列、链表和栈。
-
非线性结构:除了线性结构,其他的数据结构均为非线性结构,特点是单个数据之间存在多个对应关系
稀疏数组
稀疏数组将数组中的内容进行压缩,存储在一个更为精练的二维数组中,稀疏数组的本质其实就是用时间置换空间
具体的处理的方法是:
- 该数组之中一共有几行几列进行记录
- 把相同元素内容忽略后,只记录具有不同内容单元的位置
二维数组转稀疏数组的思路
- 遍历原始的二维数组,得到有效数据的个数sum
- 根据sum就可以创建稀疏数组
sparseArr = new int[sum+1] [3]
- 将二维数组的有效数据数据存入到稀疏数组
int[][] array = new int[6][7];
int sum = 0;
array[2][5] = 1;
array[6][5] = 2;
array[5][1] = 1;
array[5][4] = 2;
//打印array二维数组
for(int[] ints : array){
for(int anInt : ints){
System.out.print(anInt + "\t");
}
System.out.println();
}
//得到有效数据的个数sum
for(int i=0; i<array.length; i++){
for(int j=0; j<array[i].length; j++){
if(array[i][j] != 0){
sum++;
}
}
}
//创建稀疏数组
int[][] sparseArr = new int[sum+1] [3];
sparseArr[0][0] = 6;
sparseArr[0][1] = 7;
sparseArr[0][2] = sum;
//将有效数据数据存入到稀疏数组
int count = 0;//count记录这是第几个数据
for(int i=0; i<array.length; i++){
for(int j=0; j<array[i].length; j++){
if(array[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = array[i][j];
}
}
}
//输出稀疏数组
for (int i = 0; i < spraseArr.length; i++) {
System.out.println(spraseArr[i][0] + "\t" + spraseArr[i][1] + "\t" + spraseArr[i][2] + "\t");
}
将稀疏数组转换为二维数组
- 获取稀疏数组上存放的行和列的数据
- 对稀疏数组上下面的每一行数据进行遍历出来
int[][] array = new int[ spraseArr[0][0] ][ spraseArr[0][1] ];
//稀疏数组spraseArr第一行是共和了多少列、多少行和有效值
//从第二行开始才是记录有效值的位置,所以遍历时下标i应该从1开始
for(int i=1; i < spraseArr.length; i++){
array[spraseArr[i][0]][spraseArr[i][1]] = spraseArr[i][2];
}
for (int[] row : array) {
for(int data :row) {
System.out.print(data + "\t");
}
System.out.println();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!