堆栈
first-in last-out
队列
first-in first-out
数组
特点:
1.查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素
2.增删慢:数组的长度是固定的,我们想要增加\删除一个元素,必须创建一个新数组,把源数组的数据复制过来
在堆内存中,频繁的创建数组,复制数组中的元素,销毁数组,所以效率很低。
链表
查询慢:链表中地址不是连续的,每次查询元素,都必须从头开始查询
增删快:链表结构,增加、删除一个元素,对链表的整体结构没有影响,所以增删快。
链表中的每一个元素也称之为一个节点,一个节点包含了一个数据源(存储数组),两个指针域(存储地址)
单向链表:链表中只有一条链子,不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)
双向链表:链表中有两条链子,有一条链子是专门记录元素的顺序的,是一个有序的集合
细节 https://www.cnblogs.com/Tanggula-pioneer/p/11825745.html
树
一、二叉树
分支不能超过两个的树
分为左子树(左孩子)与右子树(右孩子)
二、二叉排序树 / 查找树
在二叉树的基础上,元素是有大小顺序的
左子树小,右子树大。
***三、平衡树 ***
任意节点的子树的|高度差| <= 1
四、不平衡树
左孩子数量不等于右孩子数量
五、红黑树
一种特殊的二叉查找树
特点:
趋近于平衡树,查询的速度非常的快,查询叶子节点的最大次数和最小次数不能超过两倍。
性质:
1.每个节点不是红色就是黑色
2.不可能有连在一起的红色节点
3.根节点都是黑色 root(入度为0)
4.每个红色节点的两个子节点都是黑色。叶子节点都是黑色(最后都有一个Null节点):出度为0,满足了性质就可以近似的平衡了,不一定要红黑,可以为其他的。
查找算法:
遍历(for循环),
二分(必须有序),
*哈希:最高效,O(1),会有hash冲突, jdk1.8中hashmap是由数组+链表+红黑树组成,红黑树的作用就是解决hash冲突,
索引,
bfs&dfs,
平衡树,
*B+树,
B-树,
*红黑树,
*二叉搜索树