不积硅步
纸上得来终觉浅,绝知此事要躬行!
展开
-
比较排序:堆排序
堆讲堆排序之前,我们先讲讲堆,下面是堆的的特点堆总是一个完全二叉树每个节点大于等于或者小于等于它的子节点 二叉树: 每个非叶子节点最多有两个分支节点满二叉树: 每个非叶子节点都有两个子节点除了最后一层,其上各层 (1~h-1) 的结点数都达到最大个数,并且最后一层所有的结点都连续集中在最左边,这就是完全二叉树完全二叉树: 最后一层的最后一个节点的父节点不满足满二叉树之外,其它非叶子节点都满足满二叉树满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树堆分为最小堆和最大堆最大堆:是一原创 2022-04-03 21:28:00 · 723 阅读 · 0 评论 -
B树、B+树入门
文章目录引入B树B+树B树和B+树的区别引入B树一种平衡树,这种数据中结构设计出来就是为了解决磁盘存储数据的,之前红黑树、avl树,每个节点都是只有一个键,而B树每个节点可以有多个键,通常B树一个节点的大小和物理内存中一页的大小是相等的,这样就便于存储;另外的原因是B树的出度大于avl树和红黑树,后两者是二叉树,只有两个节点,而B树可以有多个节点,这意味着B树的高度低于后两者,因为磁盘是通过制动手臂旋转进行寻道的,树的高度和寻道次数是成正比的,所以B树比后两者后容易进行磁盘的读取B树B树也是一种原创 2022-03-17 15:14:39 · 779 阅读 · 0 评论 -
并查集(java实现)
文章目录并查集简易并查集图解简易代码实现并查集优化图解并查集优化代码实现并查集定义: 并查集是一种树型数据结构(多叉树),并查集可以高效地查找和合并,常用于求连通问题,最小生成树kruskal算法简易并查集图解初始化查找合并结构:每个数据可以看作一个节点每一组数据都是一颗树一个组中的数据对应的树和另外一个组中数据对应的树之间没有任何关系初始化的时候把索引当作每个组的标识符测试--------------测试并查集中组的数量:--------------原创 2022-01-14 00:31:10 · 1195 阅读 · 0 评论 -
堆之最小堆、最大堆(java实现)
文章目录堆图解最大堆的api设计最大堆代码实现最小代码实现堆定义:堆是树型的一对多的数据结构,使用数组实现对应完全二叉树每个节点大于等于或者小于等于它的子节点二叉树: 每个非叶子节点最多有两个分支节点满二叉树: 每个非叶子节点都有两个子节点完全二叉树: 最后一层的最后一个节点的父节点不满足满二叉树之外,其它非叶子节点都满足满二叉树堆分为最小堆和最大堆最大堆:是一个完全二叉树,父节点不小于子节点最小堆:是一个完全二叉树,父节点不大于子节点堆的特性:堆的前一半是非叶子节点,后原创 2022-01-05 22:44:54 · 3550 阅读 · 0 评论 -
字典树、单词查找树(java实现)
文章目录字典树(单词查找树)性质图解api设计代码实现应用字典树(单词查找树)字典树定义: 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。性质根节点不包含字符,除根节点外每一个节点都只包含一个字符从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串每个节点的所有原创 2022-01-05 16:32:18 · 642 阅读 · 1 评论 -
哈夫曼树、最优树(java实现)
文章目录哈夫曼树图解流程api设计代码实现哈夫曼树定义:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。节点数确定先给叶子节点排个序找出两个最小节点,生成一个新的节点huffman树有2n-1个节点,n个是叶子节点,n-1个非叶子节点图解流程红色的节点是叶子节点,黑色的节点是生成的节点,生成的节点数据为null,权值为子节点权值的和wpl:树的所有叶结点的带权原创 2022-01-05 16:27:25 · 687 阅读 · 0 评论 -
串之朴素算法和kmp算法(java实现)
文章目录BF算法(朴素算法)KMP算法BF算法(朴素算法)主串和匹配串的字符不匹配时:得出一个规律,主串回溯 i-j+1, 匹配从头开始主串和匹配串的字符匹配时:继续比较下一个字符,结束条件是 i 和主串长度相同或者 j 和匹配串长度相同一般是求出匹配串在主串的开头位置时间复杂度为O(m*n)public class BF { public static void main(String[] args) { System.out.println(b原创 2022-01-01 15:52:34 · 548 阅读 · 0 评论 -
图应用之最小生成树之邻接表实现kruskal算法(java实现)
文章目录kruskal算法过程代码实现过程代码实现kruskal算法过程查找最小的权值边判断生成树是否形成环G = (V,E) 表示一个网,也可以写成 N = (V,E)U: 存放顶点的集合 T: 存放边的集合 最小生成树可能不指一个第1步:找出最小的权值边(A,B)和(A,C),二选一,将(A,C)加入T,T = {(A,B)}第2步:找出最小的权值边(A,C),将(A,C)加入T,T = {(A,B),(A,C)}第3步:找出最小的权值边(B,D),将(B,D)加入T原创 2021-12-30 19:57:13 · 534 阅读 · 0 评论 -
图应用之最小生成树之邻接表实现prim算法(java实现)
文章目录生成树最小生成树prim实现最小生成树连通无向网生成最小生成树的过程代码实现过程代码实现生成树生成树定义: 所有的顶点由边连接在一起,不存在回路的图生成树满足的特点:生成树的顶点个数与图的顶点个数相同一个有n个顶点的连通图,生成树有n-1条边生成树添加一条边必然形成回路生成树中两个顶点的路径是唯一的最小生成树最小生成树的定义:给定一个连通网(带权无向图或者带权有向图), 在该网所有的生成树中,使得权值之和最小的生成树被称为最小生成树,也叫最小代价树连通图定义: 图中任意两个原创 2021-12-26 21:22:47 · 754 阅读 · 0 评论 -
邻接表实现带权无向图(无向网)或者(有向网)带权有向图(java实现)
文章目录ListGraph(邻接图)的api设计打印图的邻接表测试删除边测试删除顶点测试测试边的权值深搜测试广搜测试测试图是否是连通图是否有环代码ListGraph(邻接图)的api设计顶点类和边类设计类名VNode构造方法public VNode(T data, Edge edge, VNode next); 创建顶点类对象的构造方法成员变量1、T data; //顶点的值2、Edge edge; //顶点所依原创 2021-12-26 18:19:20 · 2364 阅读 · 0 评论 -
无向图深搜的应用(java)
无向图深搜的应用连通性路劲查找连通性顶点----------测试无向图中顶点的数量:-----------------7----------测试无向图中边的数量:-----------------6----------邻接表表示无向图测试:-----------------A顶点的邻接表: B C B顶点的邻接表: A C D E C顶点的邻接表: A B D顶点的邻接表: B E顶点的邻接表: B F顶点的邻接表: G G顶点的邻原创 2021-12-21 23:50:01 · 756 阅读 · 0 评论 -
无向图(java)
文章目录无向图术语邻接矩阵api设计代码实现邻接矩阵测试邻接表实现无向图api设计代码实现邻接表测试无向图术语定义:图是由一组顶点和一组能够将两个顶点相连的边组成的表示方式邻接矩阵: 使用二维数组实现,容易造成空间的浪费邻接表: 使用数组和链表实现图的述语相邻顶点: 两个顶点通过一条边相连时,称这两个顶点是相邻顶点度:某个顶点相邻顶点的个数叫做这个顶点的度子图:边的子集和边所依赖的顶点组成的图叫做子图路径:边和边所依赖的顶点组成路径环:起点和终点相同连通图:图中任意两个顶点存在原创 2021-12-19 19:51:55 · 3010 阅读 · 0 评论 -
红黑树插入实现(java)
文章目录红黑树的定义与性质LL类型的右旋RR类型的左旋插入插入平衡性逻辑插入图解插入代码平衡性代码删除代码实现红黑树的定义与性质红黑树是一种含红节点和黑节点并且能够自平衡的二叉树节点颜色不是红色就是黑色根节点是黑色叶子节点(为null叶子节点)都是黑色如果一个节点的颜色是红色,它的子节点一定是黑色任意一节点到每个叶子节点的路径都包含数量相同的黑节点LL类型的右旋这里的左旋和右旋的代码和avl树有些不一样,需要考虑节点类的父节点g或者p当作k参数传入右旋原创 2021-12-10 18:18:52 · 390 阅读 · 0 评论 -
AVL树实现(自平衡二叉树)java
文章目录AVL树插入类型根据四种类型判断旋转方式节点深度递归非递归avl树api设计代码实现递归树的深度LL类型的左旋RR类型右旋RL类型先右旋后左旋LR类型先右旋后左旋插入查找删除中序遍历测试递归代码实现非递归树的深度旋转插入查找删除中序遍历测试非递归代码实现AVL树定义: AVL叫做自平衡二叉树(高度平衡树),任意一节点的对应的两颗子树的最大高度差为1插入会造成不平衡,删除不会造成不平衡插入1、在加入元素之后,我们需要判断平衡性,看需不需要进行调整2、任意一次插入,造成不平衡情况有4种类型原创 2021-12-07 23:16:32 · 698 阅读 · 0 评论 -
二叉搜索树递归、非递归实现(java)
文章目录二叉树理论递归、迭代二叉树实现二叉查找树的api式设计代码实现递归插入查找最小键、最大键删除前序遍历中序遍历后续遍历层序遍历树的深度测试迭代插入查找最小键、最大键删除前序遍历中序遍历后续遍历层序遍历树的深度测试递归二叉树代码实现非递归二叉树代码实现二叉查找树的缺陷二叉树理论定义:1、每个节点最多有两个子节点2、左子树小于父节点,右子树大于父节点二叉树的实现:使用链式存储(节点)实现二叉树使用递归的思想实现二叉树使用非递归/迭代实现二叉树递归、迭代递归思想:不断原创 2021-12-06 22:50:06 · 537 阅读 · 0 评论 -
符号表(java)
文章目录符号表无序符号表无序符号表的api设计无序符号表有序符号表的插入有序符号表代码实现符号表符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值使用链式存储(节点)实现无序符号表设计思路: 在链表头部根据键(key) , 插入元素,根据键(key) 删除元素有序符号表在插入的时候比较键的大小,将元素插入合适的位置无序符号表的api设计类名Node<k,v>原创 2021-11-29 17:54:38 · 1188 阅读 · 0 评论 -
队列(java)
文章目录队列链队列链队列的api设计代码实现时间复杂度队列先进先出使用顺序存储(数组)实现队列(插入,删除需要移动元素,很慢)使用链式存储(节点)实现队列java中Queue是接口,Dequeue是子接口(被称为双端队列),LinkedList实现了Dequeue链队列设计思路:在链表头部插入元素,在链表尾部删除元素链队列的api设计节点类类名Node构造方法Node(T item,Node next): 创建节点对象的构造方法成员变原创 2021-11-29 15:03:19 · 1189 阅读 · 0 评论 -
链栈(java)
栈先进后出线性存储(数组)实现栈,java中的Stack就是使用数组实现的链式存储(节点)实现栈链栈设计思路:在链表头部插入、删除元素链表实现栈的api节点类类名Node构造方法Node(T item,Node next): 创建节点对象的构造方法成员变量1.T item: 存储数据2.Node next: 指向下一个节点链栈类名Stack构造方法Stack(): 创建栈对象的构造方法成员方法1.public b原创 2021-11-29 14:23:30 · 668 阅读 · 0 评论 -
双向链表(java)
文章目录双向链表的api设计图解代码实现双向链表的api设计类名Node构造方法Node(T t, Node pre,Node next): 创建节点对象的构造方法成员变量T item: 存储数据Node pre: 指向上一个节点Node next:指向下一个节点类名class TwoWayLinkList<T extends Comparable> implements Iterable构造方法TwoWayLinkList():原创 2021-11-28 23:53:10 · 356 阅读 · 0 评论 -
单链表(java)
文章目录单链表的定义单链表的api设计代码实现单链表的逆转单链表求中值单链表是否有环单链表环的入口单链表的定义使用链式存储结构实现单链表数组:一段连续的存储空间,属于数据结构的物理结构中的顺序存储结构节点: 链式存储空间,属于数据结构的物理结构的链式存储结构线性表:0个或者多个数据元素的有限序列,数据元素之间的关系是一对一,第一个元素没有前驱元素和最后一个元素没有后继元素外,其它数据元素都有前驱和后继单链表:使用链式存储结构实现线性表单链表的api设计节点类api:类名原创 2021-11-28 21:03:25 · 244 阅读 · 0 评论 -
数组实现线性表(java)
文章目录线性表的定义使用数组实现顺序表顺序表的API设计代码实现时间复杂度线性表的定义0个或者多个数据元素的有限序列,数据元素之间的关系是一对一,第一个元素没有前驱元素和最后一个元素没有后继元素外,其它数据元素都有前驱和后继使用数组实现顺序表算法:描述解决问题的步骤在计算机上描述解决问题的步骤,需要使用流程控制数组:一段连续的存储空间线性表:线性表是数据结构的一种,数据结构是数据元素之间的关系,线性表中数据元素的关系就是线性表的定义,数据元素的上层是数据对象,数据对象是数据元素相同的数据元素的原创 2021-11-29 13:17:40 · 1127 阅读 · 0 评论 -
数据结构与算法关系
文章目录数据结构与算法关系算法的定义算法的特性算法的设计要求算法的度量方法函数的渐近增长数据结构与算法关系数据结构是算法的一部分,我们可以通过设计数据结构比较算法的好坏算法的定义解决特定问题的求解步骤的描述,在计算机中表现为指令的有限序列,并且一条指令表示一条或多条操作(这是大话数据结构的定义)一系列解决问题的的明确指令,也就是说,对于符合一定规范的输入,能够在有限的时间内获得要求的输出(算法设计与分析基础的定义)抽象一下:解决问题、指令、一定规范输入、有限时间、要求的输出,原创 2020-09-27 14:03:46 · 674 阅读 · 0 评论 -
数据结构的定义
数据结构的定义提到数据结构,我们不得不想到算法,来看看什么是数据结构1.如何在书架上摆放图书?如何杂乱无章的放,书少还好,书多100000本,找私人)按拼音排序,通过书的首字母找书按区域分,在按字母分这里我们提出一个词,数据组织,通过不同的方式,把我们的书分类,查找起来是不是很容易2.打印1-N使用循环打印和使用递归打印。二者的区别在于,循环首先定义一个变量,然后不停改变变量的值,从而实现打印。递归就是不停的调用函数,之前的函数需要空间存储,当N的值过大时,计算机的内存不够,就会爆原创 2020-09-12 17:53:09 · 7633 阅读 · 0 评论