![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 78
基本的数据结构知识
败给你的黑色幽默丶
if i say you're the one would you believe me;
if i ask you to stay would you show me the way
展开
-
【数据结构-图01】图的相关概念和实现
图的相关概念图 G顶点 V边 E图的应用有向图边有方向;单行有向无环图;有向图的出度和入度无向图多重图和简单图平行边的概念:无向图、有向图中不同多重图:有平行边或者自环的图简单图:没有平行便也没有自环无向完全图无向完全图边的个数有向完全图有权图连通图图中任意两个顶点可以直接或者间接抵达连通分量连通分量也是图,是图的子图;强连通图强连通图是有向图强连通分量图的实现方案##1.邻接矩阵邻接矩阵需要n2存储空间(1)无向图对.原创 2021-09-28 23:36:20 · 306 阅读 · 0 评论 -
【并查集 Union Find】
需求分析图中每个圆圈都是一个村庄,每个村庄连接起来的是一个部落;需求:设计一个数据结构,能够快速执行两个操作(1)查询两个村庄之间是否有连接的路(2)连接2个村庄如果用数组或者链表实现,村庄就是数组中的元素,一个数组就是一个连接在一起的村庄集合查看两个村庄是否有连接的路,就要遍历数组,查看两个元素是否在同一个数组中,O(n)级别;平衡二叉树来实现效果也是需要遍历整个树哈希表来实现,如果一个部落只有一个村庄,那么n个村庄就需要n个哈希表,那么查询效率也是O(n)并查集能够办到查询和连接的平原创 2021-09-25 19:34:23 · 73 阅读 · 0 评论 -
二叉树的非递归遍历
1.前序遍历 public void preorder(Visitor<E> visitor) { if (visitor == null || visitor == null) return; Node<E> node = root; LinkedList<Node<E>> stack = new LinkedList<>(); while (true) {原创 2021-09-17 01:24:42 · 53 阅读 · 0 评论 -
【数据结构】【堆】二叉堆
二叉堆结构的特点1.二叉堆提供的接口添加元素获取最大值删除最大值public interface Heap<E> { int size(); // 元素的数量 boolean isEmpty(); // 是否为空 void clear(); // 清空 void add(E element); // 添加元素 E get(); // 获得堆顶元素 E remove(); // 删除堆顶元素 E replace(E element); // 删除堆顶元素的同时插入一个原创 2021-09-13 02:03:44 · 409 阅读 · 0 评论 -
哈希表 HashTable
(1)哈希表底层存储结构也是线性表(2)哈希表的核心在于哈希函数,哈希函数用于获取index值,决定了将元素放在哪个位置(3)hash表的增删查时间复杂度都是O(1)可以根据hash函数直接定位元素,进行增删查(4)hash表是空间换时间因为hash表的容量是事先申请的,会造成一定空间的浪费(5)桶: hash表中arr[index]叫做桶,因为一个桶中可以存放多个hash值相同的元素hash冲突hash冲突本质上就是不同的元素根据hash函数得到相同的结果: key1 != key2.原创 2021-09-12 20:50:34 · 574 阅读 · 1 评论 -
树05_红黑树
红黑树的五个性质说明:1.性质3中:叶子结点(空节点)是假想出来的,实际并不存在2.这五条性质并不是保证红黑树中平衡因子像AVL树一样严格<=1,只是保证树大致平衡01-错误示范不是红黑树;分析:1.满足性质12.满足性质23.性质三是假想的,可以不管4.满足性质45.性质5中叶子结点指的是假想出来的叶子结点,是为null的black节点。38的right隐藏了一个black叶子结点,因此该树不满足性质502-红黑树与4阶B树等价变换红黑树是二叉树,不是多阶B树红黑树原创 2021-09-12 01:07:42 · 196 阅读 · 0 评论 -
树04_B树
B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现;B树的特点(1)高度平衡,每个节点的所有子树高度一致(2)每个节点有n个元素,n+1个指针(3)仍满足搜索树的特点注意:B树的关键特征是指针个数是元素个数+1m阶B树的性质阶的意思是指针个数;二阶B树 = 二叉搜索树(1)根节点的元素个数: x ∈ [1,m-1](2)非根节点的元素个数:x ∈ [┌ m/2 ┐−1,m-1](3)当前节点的子节点的元素个数: y = x + 1假设y∈[n,m] 那么又叫做: (n,m原创 2021-08-17 16:40:01 · 241 阅读 · 0 评论 -
树03_AVL树
概念苏联科学家发明的节点的平衡因子节点左右子树的高度差AVL树特点每个节点的平衡因子<1增删改查的时间复杂度都是O(logN)二叉树\二叉搜索树\AVL树继承结构AVL树和红黑树都是二叉搜索树编写AVL树由于节点的添加是随机的,没法干预,只能再节点添加或者删除操作做完之后,对此节点进行调整,从而维持树的平衡.(1)在添加节点之后增加了 afterAdd() 用于调整平衡;(2)在删除节点之后增加了 afterRemove() 用于调整平衡;添加导致失衡分析(1)添加节原创 2021-08-17 13:46:10 · 173 阅读 · 0 评论 -
树02_二叉搜索树
需求背景在一个数据量为n的集合中,寻找一个元素的时间复杂度为O(logn)假设以线性表来实现:1.动态数组或者链表也好,非索引形式寻找都为O(n)2.有序数组可以用二分搜索法,可以降到O(logn),但是在添加和删除的时候复杂度上升到O(n)二叉搜索树的设计1.特点 1.元素必须具备可比较性 2.左子节点 < 当前节点 < 右子节点 3.元素不可为null2.二叉搜索树类成员及接口设计对外提供的接口int size() // 元素的数量boolean isEmp原创 2021-08-05 03:29:59 · 118 阅读 · 0 评论 -
树01_二叉树
树(Tree)的基本概念节点、根节点、父节点、子节点、兄弟节点; 一棵树可以没有任何节点,称为空树 一棵树可以只有 1 个节点,也就是只有根节点 子树、左子树、右子树;度节点的度(degree):子树的个数;树的度:所有节点度中的最大值;叶子节点(leaf):度为 0 的节点;非叶子节点:度不为 0 的节点;有序树、无序树、森林有序树: 树中任意节点的子节点之间有顺序关系;无序树:树中任意节点的子节点之间没有顺序关系,也称为 “自由树”;森林:由 m(m ≥ 0)棵互不相交的原创 2021-08-05 01:18:36 · 110 阅读 · 0 评论 -
线性表03_栈和队列
循环队列循环队列的核心是队头指针的维护:1.front始终指向队头2.每个元素的索引为:(front+index)%elements.lengthpackage _01_线性表._05_队列;public class _03_CircleQueue<E> { private int size; private E[] elements; private int front;//队头元素下标 private int tail; public _原创 2021-08-04 22:28:04 · 49 阅读 · 0 评论 -
【线性表】【02】链表
动态数组的缺点:1.底层是数组,容量未满造成空间浪费2.扩容机制繁琐 O(n)3.add(index,element)的时候,index<size的时候,要移动元素链表的接口设计1.公共接口抽取由于链表的大部分接口和动态数组一致,我们抽取出一个共同的 List 接口;public interface List<E> { public static final int ELEMENT_NOT_FOUND = -1; int size(); // 元素的原创 2021-08-03 02:04:39 · 87 阅读 · 0 评论 -
【线性表】【01】数组 & 动态数组
线性表是具有 n 个相同类型元素的有限序列( n ≥ 0 )在逻辑上具有索引和数据两个部分:否能通过索引能直接访问到数据部分。常见的线性表有:数组链表栈队列哈希表(散列表)数组(1)数组是一种顺序存储的线性表,所有元素的内存地址是连续的;(2)致命缺点:数组array初始化后,其容量大小就是固定好了,以后无法动态修改数组容量注意:基本类型数组中,内存中存储的是数据;引用类型数组中,内存中存储的是对象地址;......原创 2021-08-02 23:15:54 · 58 阅读 · 0 评论 -
【01】算法复杂度分析
big(O)原创 2021-08-02 23:10:00 · 81 阅读 · 0 评论