数据结构
danyinhao
这个作者很懒,什么都没留下…
展开
-
拓扑排序有向无环图
拓扑排序算法描述代码算法描述拓扑排序就是对一个有向图进行排序,得到一个有序序列。找到有向图中入度为0的结点,加入到队列中,然后删除与该点所有关联的边,重复此操作拓扑排序可以判断改图是否有环代码queue<int>q;//priority_queue<int,vector<int>,greater<int>>q;//优先队列的话,会按照数值大小有顺序的输出//此处为了理解,暂时就用简单队列int topo(){ for(inti原创 2021-09-22 15:41:32 · 232 阅读 · 0 评论 -
B树-B+树
B树-B+树B树之2-3树的特点案例B+树B*树B树之2-3树的特点2-3树是B树的一种,这里就用2-3树作为案例2-3树的所有叶子节点都在同一层有两个结点的叫做二结点,有三个结点的叫做三结点二节点要么有两个子节点,要么没有子节点三节点要么有三个子节点,要么没有子节点B树的搜索,从根节点开始,对节点内的关键字进行二分查找,如果找到就结束,否则进入查询关键字所属范围的子节点,重复以上操作,直到叶子节点关键字集合分布在整棵树中,即叶子节点和非叶子节点都存放着数据搜索有可能在非叶子节点就结束原创 2021-09-15 15:57:14 · 50 阅读 · 0 评论 -
二进制枚举
Javapublic static void main(String[] args) { int[] a = {1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20}; for(int i = 0; i < (1<<a.length); i++) { //从0~2^n-1个状态 //判断i的二进制形式有多少个1 String str = Integer.toBinaryString(i); int n原创 2021-09-03 17:05:36 · 82 阅读 · 0 评论 -
二叉排序树
二叉排序树创建节点、插入节点、删除节点以及遍历删除节点思路代码创建节点、插入节点、删除节点以及遍历删除节点思路第一种情况:删除叶子节点 (比如:2, 5, 9, 12)思路(1) 需求先去找到要删除的结点 targetNode(2) 找到 targetNode 的 父结点 parent(3) 确定 targetNode 是 parent 的左子结点 还是右子结点(4) 根据前面的情况来对应删除左子结点 parent.left = null右子结点 parent.right = null原创 2021-08-13 22:32:27 · 75 阅读 · 0 评论 -
哈夫曼编码的压缩、解码
哈夫曼编码一、使用哈夫曼编码对字节数组进行压缩1、创建哈夫曼树2、获取每个叶子节点的哈夫曼编码3、获取压缩之后的字节数组4、整合压缩过程二、解码1、将字节转化位一个二进制字符串2、对压缩的字节数组进行解码得到原始的字节数组三、文件压缩四、文件解压五、全部代码一、使用哈夫曼编码对字节数组进行压缩1、创建哈夫曼树节点class NodeNo implements Comparable<NodeNo>{ Byte data; //存放数据 int weight; //权值 NodeNo原创 2021-08-13 22:12:51 · 451 阅读 · 0 评论 -
哈夫曼树的建立
哈夫曼树的建立思路代码思路从小到大进行排序, 将每一个数据,每个数据都是一个节点 , 每个节点可以看成是一颗最简单的取出根节点权值最小的两颗二叉树组成一颗新的二叉树, 该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和再将这颗新的二叉树,以根节点的权值大小 再次排序, 不断重复 1-2-3-4 的步骤,直到数列中,所有的数据都被处理,就得到一颗赫曼树代码1、创建节点class NodeHaffman implements Comparable<NodeHaffman>{原创 2021-08-13 21:47:51 · 193 阅读 · 0 评论 -
二叉树的遍历查找
二叉树的遍历创建节点、包含插入、查找、删除节点创建树测试创建节点、包含插入、查找、删除节点//定义一个树节点class Node { int id; Node left; Node right; public Node(int id) { this.id = id; } //前序遍历 public void pre(Node node) { if(node==null) { return ; } System.out.print(node.id + " ");原创 2021-08-13 21:02:11 · 180 阅读 · 0 评论 -
最短路算法
最短路算法dijkstra算法思路代码floyd算法思路代码SPAF解决负边权(待更)dijkstra算法思路dijkstra算法是一种解决单源最短路径的算法,能够找到起点(也叫做源点)到其他各个顶点的最短路径将每条边的路径大小用邻接矩阵weight[i][j]存储将源点到其他各个点的距离用dis[n]数组存储,使用visit[n]数组来标记某个点是否已经被访问,并将其初始化在未被访问的点中找到dis中距离源点最近的点dis[index],并将其设置未已经被访问如果未被访问的顶点的 dis[i原创 2021-08-12 23:23:54 · 65 阅读 · 0 评论 -
最小生成树
最小生成树prim思路代码prim思路代码1、构建邻接矩阵//构建邻接矩阵图class Graph{ int vers; char[] points; int[][] weight; public Graph(int vers) { this.vers = vers; this.points = new char[vers]; this.weight = new int[vers][vers]; }}2、prim算法两种实现代码//实现最小生成树class原创 2021-08-11 12:05:22 · 305 阅读 · 0 评论 -
kmp算法的代码实现
KMP计算next数组kmp算法计算next数组//计算获取next数组public static int[] getNext(String str) { int[] next = new int[str.length()]; //记录前一个字符的移动值 int i = -1, j = 0; next[0] = -1; while(j<str.length()-1) { if(i == -1 || str.charAt(i)==str.charAt(j)) { //如果字符串相等原创 2021-08-09 16:23:22 · 51 阅读 · 0 评论 -
哈希表hash
哈希表hash简介代码1. 创建需要存储的对象2. 建立链表存储3. 建立hash表4. 测试简介散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。代码1. 创建需要存储的对象//建立一个用户表class User { int id; User next; public User(int id) { th原创 2021-07-29 12:15:40 · 62 阅读 · 0 评论 -
常用排序算法
快速排序、归并排序原创 2021-07-28 20:51:25 · 58 阅读 · 0 评论 -
java中栈的应用
使用栈实现中缀表达式的计算中缀表达式转化为后缀表达式计算后缀表达式的值原创 2021-07-26 12:22:49 · 107 阅读 · 0 评论 -
使用java实现链表
链表一、单向链表创建节点对象实现链表的建立、插入、遍历以及删除二、单向链表的其他操作链表反转一、单向链表创建节点对象class Node { int no; Node next; //指向下一个节点 public Node(int no) { this.no = no; }}实现链表的建立、插入、遍历以及删除//建立链表class BuildNode { private Node head = new Node(0); //将每个节点添加到链表的最后一个节点 pub原创 2021-07-23 14:50:27 · 50 阅读 · 0 评论 -
使用java数组模拟队列
队列一、普通队列二、环形队列一、普通队列class ArrayQueue{ private int maxNums; private int front; //指向当前队列的头元素的 private int rear; //指向当前队列的最后一个元素 private int[] arr; //存储队列 //创建队列对象 public ArrayQueue(int maxNums) { this.maxNums = maxNums; this.front = 0; this.re原创 2021-07-22 11:21:01 · 39 阅读 · 0 评论