数据结构包括:线性结构和非线性结构。
线性结构
- 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系
- 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的
- 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
- 线性结构常见的有:数组、队列、链表和栈
非线性结构
非线性结构包括:二维数组,多维数组,广义表,树结构,图结构
稀疏数组
值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录再一个小规模的数组中,从而缩小程序的规模
第一行:数组的行列和一共有多少个值
后面每一个行都记录有值的位置和数值
二维数组转稀疏数组的思路
1.遍历原始的二维教组,得到有效数据的个数sum
2.根据sum就可以创建稀疏数组sparsaArr int[sum+1][]
3.将二维数组的有效数据经据存入到稀疏数组
稀疏数组转二维数组的思路
1.先读取稀砖数组的第一行·根据第一行的数据。创建原始的二维数组。
2.在读取稀疏数组后几行的数据。并赋给原给的二维数组即可,
代码
package com.m.demo;
public class sparsaArr {
public static void main(String[] args) {
// 创建一个数组
int [][] data=new int [11][11];
data[1][2]=1;
data[2][3]=2;
// data[3][4]=3;
for(int[] row:data) {
for(int i:row) {
System.out.print(i+"\t");
}
System.out.println();
}
// 转稀疏数组
/*
* 1.遍历原始的二维教组,得到有效数据的个数sum
2.根据sum就可以创建稀疏数组sparsaArr int[sum+1][]
3.将二维数组的有效数据经据存入到稀疏数组*/
// 1.遍历原始的二维教组,得到有效数据的个数sum
int sum=0;//记录有效元素
int rownum=0;//记录行数
int cownum=0;//记录列数
for(int[] row:data) {
rownum++;
cownum=row.length;
for(int i:row) {
if(i!=0) {
sum++;
}
}
}
System.out.println("数组转稀疏数组");
System.out.printf("sum=%d,rownum=%d,cownum=%d\n",sum,rownum,cownum);
int sparsaArr[][]=new int [sum+1][3];//第一行记录数组的行列和一共有多少个值
sparsaArr[0][0]=rownum;
sparsaArr[0][1]=cownum;
sparsaArr[0][2]=sum;
int sparsaRow=0;
for(int i=0;i<rownum;i++) {
for(int j=0;j<cownum;j++) {
if(data[i][j]!=0) {
sparsaRow++;
sparsaArr[sparsaRow][0]=i;
sparsaArr[sparsaRow][1]=j;
sparsaArr[sparsaRow][2]=data[i][j];
}
}
}
// 遍历sparsaArr
System.out.println("遍历sparsaArr");
for(int[] row:sparsaArr) {
for(int d:row) {
System.out.print(d+"\t");
}
System.out.println();
}
// 稀疏数组转数组
System.out.println("稀疏数组转数组");
int newSparsaArr[][]=new int[sparsaArr[0][0]][sparsaArr[0][1]];
// 遍历稀疏数组 从第二行开始才是数据 一共有多少个数据 就有多少行
for(int i=1;i<=sparsaArr[0][2];i++) {
newSparsaArr[sparsaArr[i][0]][sparsaArr[i][1]]=sparsaArr[i][2];
}
System.out.println("遍历数组");
for(int[] row:newSparsaArr) {
for(int i:row) {
System.out.print(i+"\t");
}
System.out.println();
}
}
}