![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
数据结构与算法
@沐帆
这个作者很懒,什么都没留下…
展开
-
数据结构(一)----散列表
散列表 : 就是把key值通过哈希函数转换为一个整数值 然后把该值通过散列函数的设计方法得到一个值作为数组下标 把value值存储该下标对应的位置散列函数 :要求散列函数计算得到的散列值必须是大于等于 0 的正整数,因为 hash 值需要作为数组的下标如果 key1key2 ,那么经过 hash 后得到的哈希值也必相同即:hash(key1) hash(key2)如果 key1 != key2 ,那么经过 hash 后得到的哈希值也必不相同即:hash(key1) != hash(key2)特点原创 2020-11-17 17:46:42 · 305 阅读 · 0 评论 -
数据结构(二)----二叉树
1.相关概念节点的度 : 一个节点含有的子节点的个数叫做该节点的度 例如 上图 A节点的度为 6叶节点或终端节点 : 度为0的节点叫叶节点 例如 B C H I … …非终端节点或分支节点 : 度不为0的节点 例如 D E F G … …父节点或双亲节点 : 若一个节点含有子节点 则该节点是其子节点的父节点 例如 : .原创 2020-11-17 17:51:52 · 615 阅读 · 0 评论 -
散列表 + 双向链表应用----LinkedHashMap
LinkedHashMap是HashMap的一个子类 其在HashMap的基础上添加了一个双向链表来保证元素的插入和取出顺序一致性那么LinkedHashMap是如何通过双向链表来保证元素的插入有序性的 ?LinkedHashMap在添加数据时 把元素添加到散列表的基础之上 还会把元素插入到维护的双向链表的尾部 (如此 在遍历LinkedHashMap时 直接遍历双向链表即可)而HashMap在遍历时 会遍历一整个散列表 所以HashMap的遍历速度和其数组的长度有关系 而Link.原创 2020-11-18 16:17:22 · 307 阅读 · 0 评论 -
数据结构(三)----平衡二叉树
平衡二叉树 又叫AVL树1. 性质 :可以是空树任意一个节点的左子树和右子树都是平衡二叉树 且高度之差的绝对值 <=12.失衡的4种情况在结点的左子树的左子树插入元素,LL 插入;在结点的左子树的右子树插入元素,LR 插入;在结点的右子树的左子树插入元素,RL 插入;在结点的右子树的右子树插入元素,RR 插入;3.解决方法 代码实现定义节点类和一些基本方法public class AVLTree { //当前树 private AvlNo.原创 2020-11-23 10:37:47 · 279 阅读 · 2 评论 -
红黑树的应用----TreeMap
红黑树是一种类似于平衡二叉树的结构特点 :根结点是黑的。每个节点非黑即红如果节点为红 那么其子节点肯定是黑色(注意 : 没有2个相邻的红节点)叶节点下面有2个null的黑色子节点从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serial.原创 2020-11-24 09:44:55 · 275 阅读 · 1 评论 -
List和Map一些常用实现类整合
1. List集合常用实现类1.1ArrayListArrayList : 底层使用数组实现初始容量为10 当数组满后 会扩容为原来数组的1.5倍大小数组访问时 根据元素下标可以快速定位到具体的元素 所以查询效率很高添加/删除直接添加到数组末尾/删除 : 不会进行数据拷贝工作指定索引位置添加/删除 : 需要把指定位置到数组最后一个元素的所有元素集体向后移动一位 即拷贝数组(且 其索引位置越靠前 则其效率越低)使用无参构造创建对象后 不会马上实例化 而是在添加第一个元素的原创 2020-11-25 10:59:04 · 272 阅读 · 0 评论 -
数据结构(四)----堆
1.定义堆是一个完全二叉树堆中的每一个节点值必须大于等于(大顶堆)或者小于等于(小顶堆)其子节点的值2.堆的存储结构之前我们知道完全二叉树可以对应连续存储在数组中只会浪费掉下标为0的位置 如下图 (而如果不能满足该条件的就不是完全二叉树)3.使用数组来实现堆基本方法public class Heap { private int[] date;//存储元素的数组 private int size; //数组长度 private int count;//已原创 2020-11-26 09:42:08 · 121 阅读 · 0 评论 -
堆的应用----堆排序
堆排序 : 核心就是不断查询最大的元素 然后放到数组尾部即可把数组堆化(大顶堆) 此时根节点就是最大的元素把根节点值和数组最后一个元素进行替换 此时最大值就在末尾(之后进行替换时需要倒叙挨个往前替换)对于替换后的堆 已经不满足大顶堆的定义 对其再次堆化 (注意 : 这里堆化时不包含已经替换到数组末尾的元素)堆化完成后 根节点是最大元素 然后循环执行上面的步骤 直到最后一个元素看如下例子 目前是一个已经堆化数组替换首尾元素由于此时已经不满足堆的定义 再..原创 2020-11-26 13:37:04 · 154 阅读 · 0 评论 -
数据结构(五)----图
1.定义顶点 : 如上图中每个元素都是一个顶点 如 A B C D E F边 : 顶点到顶点直接建立的连接关系叫做边 如 AB AD AC等等度 : 每个顶点有多少条边就是该顶点的度 如A的度为3 C的度为3 B的度为2等等2.图的分类生活社交网其实就是一个图结构比如微信 QQ 微博 等等像微信/QQ中的每个用户就是顶点 而用户之间添加好友后 这个添加关系就是边 用户添加的好友个数就是度有向图和无向图在微博中的图和微信 qq有些区别 比如用户A.原创 2020-11-27 15:02:47 · 134 阅读 · 0 评论