
数据结构
冰怜
真正的静,是生命里寂然涤思;真正的动,是世路上毅然向前
展开
-
java 栈+队列数据结构
栈也是一种线性结构,其实你就可以把理解为数组,只能从一端添加元素,也只能从哪一端删除数据。这一端称为栈顶,栈是一种后进先出的数据结构,可以理解,吃了就吐力扣的一道题 利用栈来解答以下是java代码package com.binglian.stack;import java.util.Stack;/** * 栈 * 括号匹配应用 * @author bi...原创 2018-12-21 09:06:33 · 357 阅读 · 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 · 887 阅读 · 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 · 1293 阅读 · 0 评论 -
线段树
为什么要使用线段树最经典的线段树问题:区间染色有一面墙,长度为n,每次选择一端墙进行颜色m次操作后,我们可以看见多少种颜色?m次操作后,我们可以在[i,j]区间内看见多少种颜色?另一种经典问题:区间查询线段树的基本表示 区间n个元素,需要多少个节点 区间需要多少空间 线段树的基本表示package c...原创 2019-02-19 14:45:54 · 126 阅读 · 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 · 376 阅读 · 0 评论 -
线段树的区间查询、区间更新、数组和线段树的时间复杂度
区间查询 这里我也不知道怎么说了,大概我理解的东西都在代码里面最难理解的就是在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 · 3724 阅读 · 0 评论 -
Trie 字典树(前缀树)、Trie创建、Trie的添加元素
Trie isWord 标记单词是否结束末尾 Trie的创建TreeMap是树结构的Map、Character包装类的char 需要初始化Trie,用构造方法来初始化this.isWord=isWord;//把传过来的isWord给了构造参数isWordnext=new TreeMap<>();//创建新的节点 并指向了新创建的p...原创 2019-02-20 20:09:12 · 673 阅读 · 1 评论 -
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 · 551 阅读 · 0 评论 -
Trie——677. 键值映射、211. 添加与搜索单词 - 数据结构设计
677. 键值映射实现一个 MapSum 类里的两个方法,insert 和 sum。对于方法 insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原来的键值对将被替代成新的键值对。对于方法 sum,你将得到一个表示前缀的字符串,你需要返回所有以该前缀开头的键的值的总和。示例 1:输入: insert("apple", 3), 输出...原创 2019-02-20 20:26:50 · 115 阅读 · 0 评论 -
图论—基本表示
图论 Graph Theory图论涉及到的地方交通运输、社交网络、互联网、工作安排、脑区活动、程序状态执行比如交通运输 点代表着一个城市 而连接的线代表着另一个城市与这个城市的道路社交网络这可以这样认为:点代表着人,连接代表着这个人是这个人的好友图的分类无向图 如人与人之间的认识(这个点连接过去,还要返回过去)有向图 一个事件转移到另一个事件 有方向...原创 2019-03-14 22:14:52 · 804 阅读 · 0 评论 -
图的深度优先遍历
深度优先遍历深度就是不断往下渗透,然后标记是否访问过,如果没有就继续往下渗透,然后再往上回到当初的位置就和树递归差不多这是一个图我们从图中可以看到 0有四个连接点 0 1 2 5 6 我们要把遍历出来遍历流程(红色没有访问过 蓝色是标记 访问 最后都会变成红色 )我们从零开始,然后往下渗透到1,没有元素了 然后再往上回溯, 再往20 1遍历了...原创 2019-03-15 16:07:00 · 354 阅读 · 0 评论 -
栈和优先队列(一)
普通队列:先进先出;后进后出优先队列:出队顺序和入队顺序无关;和优先级相关 堆的基本表示完全二叉树:把元素顺序排列成数的形状,不缺父节点、左节点、右节点、不缺这些就是完全元素二叉树的性质就是:父节点大于左节点和右节点,左节点大于右节点 用数组存储二叉树(查父节点和左接点、右节点)查父节点:(i)=*(i-1)/2 有虚拟节点:(i)=i/2查左节...原创 2019-02-18 15:19:12 · 317 阅读 · 0 评论 -
红黑树、2-3树
红黑树与2-3树的等价性所有的红色节点都是左倾斜的我的理解是红色是融合的红黑树与2-3树是等价下,我们看图片 比较一下 红色节点是不是融合和在左边 算法导论中的红黑树的理解 红黑树是保持"黑平衡"的二叉树严格意义上,不是平衡二叉树 最大高度2logn O(logn) 红合数2-3树满足二分树的基本性质节点可以...原创 2019-02-23 14:55:47 · 203 阅读 · 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 · 8363 阅读 · 0 评论 -
Java 链表-最基础的动态数据机构:链表的创建、头部添加元素、尾部添加元素(一)笔记
Java 链表-最基础的动态数据机构优点:真正的动态,不需要处理固定容量的问题缺点:丧失了随机访问的能力数组最好用于索引的情况(最大的优点:支持快速查询)链表不适合用于索引的情况(最大的优点:动态)添加元素如果是在头部添加 那么直接把元素指向原来头部,然后把元素赋值给头部就行比如(添加的元素为 perv):perv.next=head(头部);head=perv; ...原创 2018-12-22 10:33:22 · 1938 阅读 · 2 评论 -
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 · 746 阅读 · 0 评论 -
Java 链表-删除链表、修改链表、遍历(二)笔记
上一章链表:https://blog.youkuaiyun.com/xiaoxin0630/article/details/85197714这里用虚拟头节点 更好理解,设置边界这些在上一章,循环找元素的时候index-1了,设置虚拟节点,就不需要,让人更加懂链表的删除把要添加的当前元素前一个元素的找到,然后指向当前元素的下一个元素,然后把当前元素指向为空,在c语言好像可以释放图片一样解...原创 2018-12-22 22:27:21 · 384 阅读 · 0 评论 -
java数据结构-二分树 前序遍历、中序遍历、后序遍历 思路、学习笔记(二)
二分搜索树的前序遍历在递归实现中就是,访问该节点左节点右节点代码实例:System.out.println(node.e)//该节点preOrder(node.left)//左节点preOrder(node.right)//右节点二分搜索树中序遍历二分搜索树的中序遍历仔细看和上面的图 就可以看到区别preOrder(node.left)/...原创 2019-01-03 22:26:17 · 222 阅读 · 0 评论 -
java数据结构-二分树和二分搜索的理解 添加元素、搜索元素学习笔记(一)
二叉树(和链表一样都是动态数据结构)二叉树具有天然递归结构每个节点的左子树也是二叉树每个节点的右子树也是二叉树二叉树不一定是"满"的二分搜索树(存储的元素必须有可比较性)二分树的节点创建代码我分开这样 更好让人理解,package com.binglian.BST;import java.awt.image.RescaleOp;import java...原创 2018-12-29 20:01:54 · 182 阅读 · 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 · 193 阅读 · 0 评论 -
并查集——实例一到四 从简单到理解(一)
下一篇文章,大概的一些优化和,统一的理解重要代码可以在这写问题上用并查集连接问题 网络中节点间的链接状态 网络是个抽象的概念:用户之间形成的网络 连接问题和路径问题比路径问题要回答的问题少和堆作比较 并查集的基本数据表示编号分为0和1,只要编号相同就是,同种 看下代码吧,今天学到这里,首先创建接口方法,在实现接口 packag...原创 2019-02-21 21:38:46 · 261 阅读 · 0 评论 -
并查集的重要理解。长度优化
将每一个元素,看做是一个节点 下面是模拟 我一个个吧老师模拟的图片给发出来union 4,3 4指向了3子节点指向根节点3指向86指向5 9指向4 7指向26指向2 查找元素一样的先判断边界,然后只要查找的元素和不相等就循环 找到相同 p=parent[p] /** * 查找过程,查找元素p...原创 2019-02-21 22:38:02 · 355 阅读 · 0 评论 -
AVLT(平衡树)——基于二分树的 节点高度、平衡因子
平衡二叉树对于任意一个节点,左子树和右字数的高度差不能为超过1 标注节点的高度(也可以直接看成多少层 如下就可以看到 总共就是5层)叶子节点、对应的高度就是1、父节点就是最高的节点+1计算平衡因子叶子节点 空的就是左0 右0 0-0=0 叶子节点是0左右两树的高度差就是因子、仔细看图 在以前的BST(二分树的基础下、略微修改)p...原创 2019-02-22 10:01:15 · 1213 阅读 · 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 · 366 阅读 · 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 · 221 阅读 · 0 评论