一、线性结构和非线性结构
一、线性结构
1.特点:数据元素之间存在一对一的线性关系
2.有两种不同的存储结构顺序存储结构(数组)、链式存储结构(链表)顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的
3.链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息
4.线性结构常见的有:数组、队列、链表和栈
二、非线性结构
1.二维数组、多维数组、广义表、数结构、图结构
二、稀疏数组
二维数组转稀疏数组的思路
1.遍历原始的二维数组,得到有效数据的个数sum
2.根据sum就可以创建稀疏数组sparseArr int[sim+1][3]
3.将二维数组的有效数据存入到稀疏数组
稀疏数组转原始二维数组思路
1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面chessArr = int[11][11]
2.在读取稀疏数组后几行的数据,并赋予原始二维数组即可
三、队列
1.队列是一个有序列表,可以用数组或事链表来实现
2.遵循先入先出的原则,即:先存入队列的数据要先取出,后存入的要后取出
数组模拟循环队列(通过取模的方式)
思路
1.front变量:front就指向队列的第一个元素,也就是说arr[front]就是队列的第一个元素,front的初始化为0
2.rear变量:rear指向队列的最后一个元素的后一个位置,因为希望空出一个空间作为约定,rear的初始化为0
3.当队列满是,条件是(rear+1)% maxSize == front
4.当队列为空,条件是 rear == front
5.队列中有效数据的个数 (rear + maxSize -front)%maxSize
public class Structure{
public static void main(String[] args) {
CircleStructure circleStructure = new CircleStructure(3);
circleStructure.add(1);
circleStructure.add(2);
circleStructure.add(3);
circleStructure.showQueue();
}
}
class CircleStructure {
//构造方法
public CircleStructure(int maxSize) {
this.maxSize = maxSize;
this.arr = new int[maxSize];
}
private int maxSize;
private int front;
private int rear;
private int[] arr;
//是否已满
private boolean isFull(){
return (rear +1)% maxSize == front;
}
//是否为空
private boolean isNull(){
return rear == front;
}
//数值多大
private int size(){
return (rear+maxSize-front)%maxSize;
}
//添加
public int add(int number){
if(isFull()){
return 0;
}
arr[rear] = number;
rear = (rear +1)% maxSize;
return 1;
}
//获取
public int get(){
if(isNull()){
return 0;
}
int value = arr[front];
front = (front +1) % maxSize;
return value;
}
//展示队列
public int showQueue(){
if(isNull()){
return 0;
}
for(int i = front; i<front+size();i++){
System.out.println(arr[i]+" "+i%maxSize+" "+arr[i%maxSize]);
}
return 1;
}
//头节点
public int headQueue(){
if(isNull()){
return 0;
}
return arr[front];
}
}