数据结构
冰怜
真正的静,是生命里寂然涤思;真正的动,是世路上毅然向前
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
红黑树、2-3树
红黑树与2-3树的等价性 所有的红色节点都是左倾斜的 我的理解是红色是融合的 红黑树与2-3树是等价下,我们看图片 比较一下 红色节点是不是融合和在左边 算法导论中的红黑树的理解 红黑树是保持"黑平衡"的二叉树 严格意义上,不是平衡二叉树 最大高度2logn O(logn) 红合数 2-3树 满足二分树的基本性质 节点可以...原创 2019-02-23 14:55:47 · 258 阅读 · 0 评论 -
图——寻路
package com.binglian.Graph; import java.util.Stack; import java.util.Vector; //寻路 public class Path { private Graph G; //图的引用 private int s; //起始点 private boolean[] visited; //记录dfs的过程节点是否被访问...原创 2019-03-16 20:28:42 · 262 阅读 · 0 评论 -
图的深度优先遍历
深度优先遍历 深度就是不断往下渗透, 然后标记是否访问过,如果没有就继续往下渗透,然后再往上回到当初的位置 就和树递归差不多 这是一个图 我们从图中可以看到 0有四个连接点 0 1 2 5 6 我们要把遍历出来 遍历流程(红色没有访问过 蓝色是标记 访问 最后都会变成红色 ) 我们从零开始,然后往下渗透到1,没有元素了 然后再往上回溯, 再往2 0 1遍历了 ...原创 2019-03-15 16:07:00 · 424 阅读 · 0 评论 -
图论—基本表示
图论 Graph Theory 图论涉及到的地方 交通运输、社交网络、互联网、工作安排、脑区活动、程序状态执行 比如交通运输 点代表着一个城市 而连接的线代表着另一个城市与这个城市的道路 社交网络这可以这样认为:点代表着人,连接代表着这个人是这个人的好友 图的分类 无向图 如人与人之间的认识(这个点连接过去,还要返回过去) 有向图 一个事件转移到另一个事件 有方向 ...原创 2019-03-14 22:14:52 · 873 阅读 · 0 评论 -
Trie——677. 键值映射、211. 添加与搜索单词 - 数据结构设计
677. 键值映射 实现一个 MapSum 类里的两个方法,insert 和 sum。 对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。 对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。 示例 1: 输入: insert("apple", 3), 输出...原创 2019-02-20 20:26:50 · 141 阅读 · 0 评论 -
Trie字典树的查询、前缀查询
字典树的查询是否存在 从上一文章,就很容易理解 一样的把拆分一个个的查询 判断第一个字符是否存在,如果不是直接就返回false 不是就一直更新下去 查询 最后返回cur.isWord的结束标记结果 //查询单词word是否在Trie中 public boolean contains(String word){ Node cur=root; for(int i=0;i...原创 2019-02-20 20:17:34 · 616 阅读 · 0 评论 -
Trie 字典树(前缀树)、Trie创建、Trie的添加元素
Trie isWord 标记单词是否结束末尾 Trie的创建 TreeMap是树结构的Map、Character包装类的char 需要初始化Trie,用构造方法来初始化 this.isWord=isWord;//把传过来的isWord给了构造参数isWord next=new TreeMap<>();//创建新的节点 并指向了新创建的 p...原创 2019-02-20 20:09:12 · 723 阅读 · 1 评论 -
线段树的区间查询、区间更新、数组和线段树的时间复杂度
区间查询 这里我也不知道怎么说了,大概我理解的东西都在代码里面 最难理解的就是在 E leftResult=query(leftTreeIndex, l, mid, queryL, mid); E rightResult=query(rightTreeIndex, mid+1, r, mid+1, queryR); return merger.merge(leftResu...原创 2019-02-19 16:41:55 · 3830 阅读 · 0 评论 -
线段树的创建
线段树的创建 代码是以求和为例 private void buildSegmentTree(int treeIndex,int l,int r); treeIndex 是当前的位置,就是从头部, l是左边界,r是右边界 buildSegmentTree(0,0,data.length-1); mid求中间的位置 吧线段树分为两个部分 左边和右边 左边的开始边界就是l...原创 2019-02-19 16:18:00 · 426 阅读 · 0 评论 -
线段树
为什么要使用线段树 最经典的线段树问题:区间染色 有一面墙,长度为n,每次选择一端墙进行颜色 m次操作后,我们可以看见多少种颜色? m次操作后,我们可以在[i,j]区间内看见多少种颜色? 另一种经典问题:区间查询 线段树的基本表示 区间n个元素,需要多少个节点 区间需要多少空间 线段树的基本表示 package c...原创 2019-02-19 14:45:54 · 153 阅读 · 0 评论 -
栈和优先队列——添加元素,取出元素
添加元素(Sift Up) 不断往上比较是否大于父节点元素,一直比较小于父节点的时候,位置找到了 这就有点像上浮,不断往上交换 交换代码 //交换动态数组中的位置 public void swap(int i,int j){ if(i< 0 || i>=size || j<0 || j>=size) throw new Illegal...原创 2019-02-18 19:56:46 · 1394 阅读 · 0 评论 -
哈希表、什么是哈希表、哈希冲突的处理(连地址法)、动态空间
什么是哈希表 我们先来看一到力扣很简单题 class Solution { public int firstUniqChar(String s) { int[] freq = new int[26]; for(int i = 0 ; i < s.length() ; i ++) freq[s.charAt(i) -...原创 2019-02-23 22:31:53 · 933 阅读 · 0 评论 -
栈和优先队列(一)
普通队列:先进先出;后进后出 优先队列:出队顺序和入队顺序无关;和优先级相关 堆的基本表示 完全二叉树:把元素顺序排列成数的形状,不缺父节点、左节点、右节点、不缺这些就是完全元素 二叉树的性质就是:父节点大于左节点和右节点,左节点大于右节点 用数组存储二叉树(查父节点和左接点、右节点) 查父节点:(i)=*(i-1)/2 有虚拟节点:(i)=i/2 查左节...原创 2019-02-18 15:19:12 · 364 阅读 · 0 评论 -
java 栈+队列数据结构
栈 也是一种线性结构,其实你就可以把理解为数组,只能从一端添加元素,也只能从哪一端删除数据。 这一端称为栈顶, 栈是一种后进先出的数据结构,可以理解,吃了就吐 力扣的一道题 利用栈来解答 以下是java代码 package com.binglian.stack; import java.util.Stack; /** * 栈 * 括号匹配应用 * @author bi...原创 2018-12-21 09:06:33 · 392 阅读 · 0 评论 -
平衡树——旋转的原理、左旋转、右旋转、LR、RL
右旋转 我把以前的二分树的图片模拟、和这张的旋转相对应 T1<z<T2<X<T3<Y<T4 二分树就是左边的都小于的右边的,上面的T1小于T4 从小到大 然后先把T3放在一边,再把y移到x的右边,再把T3放在y的左边 得到代码 x.right=y x.left=T3 最后就是这样 更新高度 然后就是代码 这是旋转...原创 2019-02-22 21:44:09 · 8578 阅读 · 0 评论 -
平衡树(AVLT)检查是否是二分搜索树、检查是否平衡二叉树
检查是否二分搜索树 //判断该二叉树是否是一颗二分搜索树 public boolean isBST(){ ArrayList<K> keys=new ArrayList<>(); inOrder(root,keys); for(int i=1;i<keys.size();i++) if(k...原创 2019-02-22 13:12:49 · 424 阅读 · 0 评论 -
AVLT(平衡树)——基于二分树的 节点高度、平衡因子
平衡二叉树 对于任意一个节点,左子树和右字数的高度差不能为超过1 标注节点的高度(也可以直接看成多少层 如下就可以看到 总共就是5层) 叶子节点、对应的高度就是1、父节点就是最高的节点+1 计算平衡因子 叶子节点 空的就是左0 右0 0-0=0 叶子节点是0 左右两树的高度差就是因子、仔细看图 在以前的BST(二分树的基础下、略微修改) p...原创 2019-02-22 10:01:15 · 1280 阅读 · 0 评论 -
并查集的重要理解。长度优化
将每一个元素,看做是一个节点 下面是模拟 我一个个吧老师模拟的图片给发出来 union 4,3 4指向了3 子节点指向根节点 3指向8 6指向5 9指向4 7指向2 6指向2 查找元素 一样的先判断边界,然后只要查找的元素和不相等就循环 找到相同 p=parent[p] /** * 查找过程,查找元素p...原创 2019-02-21 22:38:02 · 396 阅读 · 0 评论 -
并查集——实例一到四 从简单到理解(一)
下一篇文章,大概的一些优化和,统一的理解重要代码 可以在这写问题上用并查集 连接问题 网络中节点间的链接状态 网络是个抽象的概念:用户之间形成的网络 连接问题和路径问题 比路径问题要回答的问题少 和堆作比较 并查集的基本数据表示 编号分为0和1,只要编号相同就是,同种 看下代码吧,今天学到这里, 首先创建接口方法,在实现接口 packag...原创 2019-02-21 21:38:46 · 302 阅读 · 0 评论 -
java数据结构-二分树 前序遍历非递归实现、层序遍历、删除最小最大值、删除任意元素学习笔记(三)
前序非递归实现,使用栈 28依次进去 //二分搜索树的非递归前序遍历 public void preOrderNR(){ Stack<Node> stack=new Stack<BST<E>.Node>(); stack.push(root);//把节点进栈 while(!stack.isEmpty()){//判断不是为空执行 ...原创 2019-01-04 20:06:50 · 233 阅读 · 0 评论 -
java数据结构-二分树和二分搜索的理解 添加元素、搜索元素学习笔记(一)
二叉树(和链表一样都是动态数据结构) 二叉树具有天然递归结构 每个节点的左子树也是二叉树 每个节点的右子树也是二叉树 二叉树不一定是"满"的 二分搜索树(存储的元素必须有可比较性) 二分树的节点创建 代码我分开这样 更好让人理解, package com.binglian.BST; import java.awt.image.RescaleOp; import java...原创 2018-12-29 20:01:54 · 222 阅读 · 0 评论 -
java数据结构-二分树 前序遍历、中序遍历、后序遍历 思路、学习笔记(二)
二分搜索树的前序遍历 在递归实现中就是, 访问该节点 左节点 右节点 代码实例: System.out.println(node.e)//该节点 preOrder(node.left)//左节点 preOrder(node.right)//右节点 二分搜索树中序遍历 二分搜索树的中序遍历仔细看和上面的图 就可以看到区别 preOrder(node.left)/...原创 2019-01-03 22:26:17 · 279 阅读 · 0 评论 -
Java 链表-删除链表、修改链表、遍历(二)笔记
上一章链表:https://blog.csdn.net/xiaoxin0630/article/details/85197714 这里用虚拟头节点 更好理解,设置边界这些 在上一章,循环找元素的时候index-1了,设置虚拟节点,就不需要,让人更加懂 链表的删除 把要添加的当前元素前一个元素的找到,然后指向当前元素的下一个元素,然后把当前元素指向为空,在c语言好像可以释放 图片一样解...原创 2018-12-22 22:27:21 · 432 阅读 · 0 评论 -
java数据结构-链表递归(学习链表笔记三)
链表递归针对力扣的203题来进行学习 首先我们用链表解出来 链表的创建代码 package com.binglian.LinkedList.digui; public class ListNode { public int val; public ListNode next; public ListNode(int x){ val=x; } //链表...原创 2018-12-27 22:46:02 · 797 阅读 · 0 评论 -
Java 链表-最基础的动态数据机构:链表的创建、头部添加元素、尾部添加元素(一)笔记
Java 链表-最基础的动态数据机构 优点:真正的动态,不需要处理固定容量的问题 缺点:丧失了随机访问的能力 数组最好用于索引的情况(最大的优点:支持快速查询) 链表不适合用于索引的情况(最大的优点:动态) 添加元素 如果是在头部添加 那么直接把元素指向原来头部,然后把元素赋值给头部就行 比如(添加的元素为 perv):perv.next=head(头部);head=perv; ...原创 2018-12-22 10:33:22 · 1991 阅读 · 2 评论
分享