数据结构
文章平均质量分 71
Crownt
bug
展开
-
数据结构笔记_栈和队列
一. 栈(Stack)栈的认识:栈是一种线性结构; 相比数组,栈对应的操作是数组的子集; 只能从一端添加元素,也只能从一端取出元素,这一端称为栈顶; 栈是一种后进先出的数据结构(Last In First Out:LIFO); 栈看似简单,但在计算机世界里拥有着不可思议的作用 通过栈来记录需要匹配的元素,栈顶元素反映了在嵌套的层次关系(如,函数的嵌套,括号匹配...)中,最近的...原创 2018-11-09 14:11:18 · 176 阅读 · 0 评论 -
数据结构笔记_哈希表
一. 认识哈希表将关心的内容转化为一个索引,然后直接用一个数组来存储相应的内容 由于数组是支持随机访问的,所以可以使用O(1)的时间复杂度来执行查找操作 哈希表充分体现了算法设计领域的经典思想:空间换时间 哈希表是时间和空间之间的平衡 对于我们所关心的内容,需要将其转化为一个“索引”,这个转化过程是通过 “哈希函数”完成的哈希表中的两个关键问题:将 “键” 通过通过一个合理的“...原创 2018-11-28 11:53:11 · 232 阅读 · 0 评论 -
数据结构笔记_总结
线性结构:动态数组 普通队列 栈 链表 哈希表树形结构:二分搜索树 AVL树 红黑树 特殊二叉树:堆 线段树(区间树) 多叉树:Trie(前缀树,字典树) 并查集图结构:邻接表 邻接矩阵 抽象数据结构(高层数据结构):线性表 ...原创 2018-11-27 22:49:19 · 289 阅读 · 0 评论 -
数据结构笔记_最短路径(有向图,无向图)
一. 最短路径问题对无权图来说,进行广度优先遍历的过程,其实就求出了从一个节点开始到它所有可到达节点的最短路径 对无权图进行广度优先遍历,最终会形成一棵生成树,称为最短路径树(相当于有权图中的最小生成树),即解决了无权图单源最短路径问题(求从一个节点到其它所有可到达节点的最短路径)有权图的最短路径问题,核心思想为“松弛操作(Relaxation)”, 即判断中间经过另一个节点到达某节点...原创 2018-12-02 21:41:41 · 8922 阅读 · 1 评论 -
算法基础笔记_图
一. 图的认识1. 图的分类:按照方向性:无向图(Undirected Graph):边是没有方向的 有向图((Directed Graph):边具有方向性,有向图的不对称性会催生出一些比较复杂的算法按照权重性:无权图(Unweighted Graph) 有权图(Weighted Graph)2.图的连通性:在一张图中,并不一定所有的节点都是连通的。3.简单图...原创 2018-11-29 11:44:11 · 275 阅读 · 0 评论 -
数据结构笔记_红黑树
一. 2-3树与红黑树1. 2-3树2-3树的特点:学习2-3树,不仅对于理解红黑树有帮助,对于理解B类树也有巨大帮助 2-3树满足二分搜索树的基本性质 在二分搜索树性质的基础上,2-3树的节点可以存放一个元素或者两个元素,存放两个元素的节点具有三棵子树,且在该节点处且满足:左子节点<b<中间子节点<c<右子节点 每个节点有2个或者3个孩子,即2-3树名字...原创 2018-11-24 21:45:24 · 236 阅读 · 0 评论 -
数据结构笔记_AVL
一. 平衡树和AVL常规二分搜索树的局限性:常规的二分搜索树,有一个很大的局限性,即当数据是顺序输入时,此时的二分搜索树将退化成链表,性能上会有很大的降低平衡二叉树:对于任意一个节点,左子树和右子树的高度差不能超过1 平衡二叉树的高度和节点数量之间的关系也是O(logn)的 平衡二叉树需要标注每个节点的高度,节点的高度值为其左右子节点中的较大的高度值加一 平衡二叉树要计算平...原创 2018-11-22 22:06:58 · 151 阅读 · 0 评论 -
数据结构基础_前缀树 (字典树)
一. 认识Trie (字典树,前缀树)Trie是一种多叉树,最初是微软的一个实习生为解决通讯录高效查找问题而发明的 Trie主要用于字符串的查找,查找字符串的时间复杂度为O(w),w为字符串的长度Trie是一种多叉树结构,结构以及节点的定义如下图,右图中的蓝色节点表示是一个单词的结尾二. Trie的实现 基础Trie: 实现的关键有,节点的设计,字符串的添加,字符串的查询,字...原创 2018-11-19 21:19:43 · 368 阅读 · 0 评论 -
数据结构基础_并查集(UnionFind)
一. 认识并查集可以高效的解决连接问题(Connectivity Problem) 检查网络中节点间的连接状态(网络是个抽象概念:用户之间形成的网络) 数学中的集合类实现(合并问题) 连接问题和路径问题:连接问题只需回答是或否,而路径问题要回答出具体的路径; 对于一组数据,并查集主要支持三个动作:union(p, q) -----------------并操作,将元素p,q并入同一个...原创 2018-11-21 23:29:34 · 316 阅读 · 0 评论 -
数据结构基础_集合与映射
一. 集合(Set)类似于栈和队列,是一种高层数据结构,往往通过实现接口来完成,底层可以选用不同的数据结构 集合是一种不包含重复数据的容器,可以用于数据的去重操作 实现集合的关键是在添加元素时,不能包含重复元素(底层可以通过不包含重复元素的二分搜索树实现,也可以使用链表实现) 集合的典型应用:客户统计,词汇量统计 以二分搜索树和以链表为底层实现的集合的性能比较:在链表的头部...原创 2018-11-16 23:10:46 · 1039 阅读 · 0 评论 -
数据结构基础_二分搜索树
一. 为什么要设计树结构树结构本身是一种天然的组织结构;将数据使用树结构存储后,出奇的高效(二分搜索树,平衡二叉树中的AVL和红黑树,对数据某一类特殊操作的堆和并查集,某类特殊数据处理的线段树和Trie(字典树,前缀树))。二. 二分搜索树(Binary Search Tree)2.1 二叉树二叉树的特点:二叉树和链表一样是一种动态数据结构,不同的是二叉树的每个节点内...原创 2018-11-16 17:06:59 · 523 阅读 · 0 评论 -
数据结构笔记_线段树
一.为什么要使用线段树对于一类特殊的问题,我们关心的是线段(或者区间)问题1:问题2(对问题1进行抽象)对一段区间的更新与查询操作:线段树解决的实际问题,区间固定,区间内的数据会发生变化,对区间内的数据进行更新和查询的操作二.线段树线段树的结构,每个节点中存储的是一段区间内的某种统计值(如,求和)平衡二叉树:是一 棵空树或它的左右两个...原创 2018-11-18 19:56:45 · 148 阅读 · 0 评论 -
数据结构笔记_链表
一.链表线性数据结构:动态数组 栈 队列以上三种数据结构的底层均是依托于静态数组,解决自动变容问题靠的是reSize操作。链表的认识:是线性数据结构 是一种真正的动态数据结构,同时也是最简单的动态数据结构 更深入的理解引用(指针) 更深入的理解递归 辅助组成其他数据结构链表(Linked List):数据存储在 “节点”(Node)中clas...原创 2018-11-15 15:11:02 · 122 阅读 · 0 评论 -
数据结构笔记_动态数组的实现
public class Array<E> { private E[] data; private int size; public Array(int capacity){ data = (E[])new Object[capacity]; //不能直接new一个泛型数组,需要先new一个Object数组再强转为泛型数组。 } ...原创 2018-11-08 20:05:54 · 198 阅读 · 0 评论 -
数据结构笔记_最小生成树
一. 有权图边上的权值不一定是数值,而可以是各种类型有权图的邻接矩阵和邻接表 抽象出一个Edge类,存放边的信息//Edge类, 表示边的信息public class Edge<Weight extends Number & Comparable> implements Comparable<Edge> { private int a,...原创 2018-11-30 23:32:07 · 369 阅读 · 0 评论