一、数据结构分类:
1.线性结构:数组、栈、队列、链表、哈希表...
2.树结构:二叉树、二分搜索树、AVL、红黑树、Treap、Splay、堆、Trie、线段树、K-D树、并查集、哈夫曼树...
3.图结构:邻接矩阵、邻接表
二、数组
1.定义:把数据码成一排进行存放
2.图解:
3.示例代码 Main.java
public class Main {
public static void main(String[] args) {
int[] arr = new int[10]; //声明数组
for(int i = 0 ; i < arr.length ; i ++)
arr[i] = i;
int[] scores = new int[]{100, 99, 66};//声明数组并赋值
for(int i = 0 ; i < scores.length ; i ++)
System.out.println(scores[i]);//通过索引访问的方式来访问数组的变量
for(int score: scores) //数组具有可遍历的特性
System.out.println(score);
scores[0] = 96; ////通过索引访问的方式来修改数组的变量
for(int i = 0 ; i < scores.length ; i ++)
System.out.println(scores[i]);
}
}
输出:
4.数组基础
数组优点:快速查询;
索引可以用语义,也可以没有语义;数组最好应用于“索引有语义”的情况;
但并非所有有语义的索引都适用于数组;例: 身份证号就不适合,占用空间太大;
数组也可以处理 “索引没有语义 ”的情况;主要讨论该情况下数组的使用;
5.二次封装自己的数组
(Java 自身的数组是静态数组,不具有对内存空间增、删、改、查功能;故二次分装自己的内存,为动态数组)
例图:
自己的数组类: Array
data:数组名称
size:数组中实际装入元素的长度
capacity:数组定义的长度(容量)
代码示例:Array.java
public class Array {
private int[] data; //定义int 型数组 data
private int size; //data数组中有效元素的数量
// 构造函数,传入数组的容量capacity构造Array
public Array(int capacity){
data = new int[capacity];
size = 0;
}
// 无参数的构造函数,默认数组的容量capacity=10
public Array(){
this(10);
}
// 获取数组的容量
public int getCapacity(){
return data.length;
}
// 获取数组中的元素个数
public int getSize(){
return size;
}
// 返回数组是否为空
public boolean isEmpty(){
return size == 0;
}
}
6.向数组中添加元素
向数组末添加元素:赋值给data[size],然后 size+1(右移即可)
向指定位置添加元素:将索引为1的值及后面的值都向后移动;先将 size-1 的元素移动到size上,直到将值放入 1 中,最后 size+1
移动100
插入到 1 的位置
示例代码:Array.java