
数据结构
文章平均质量分 68
倔强的加瓦
这个作者很懒,什么都没留下…
展开
-
二叉树知识之8平衡二叉树(AVL树)
平衡二叉树平衡二叉树的引入原因平衡二叉树平衡二叉树的左旋实现步骤平衡二叉树的右旋实现步骤平衡二叉树的引入原因二叉排序树的弊端,当插入的数为{1,2,3,4,5,6}时,此时创建的二叉树就是一个如下图所示的二叉树,类似于单链表了,不能体现出二叉树的查找速度针对以上这种结构,虽然数据在插入的时候不会有什么影响,但是查询的速度将会降低(因为需要依次比较),不能发挥出BST的查找优势。故引入平衡二叉树平衡二叉树平衡二叉树又叫做平衡二叉搜索树,可以保证查询效率。特点:针对于根节点来说左右子树的高度差的原创 2021-08-01 17:08:21 · 288 阅读 · 0 评论 -
二叉树知识之7二叉排序树
二叉排序树二叉排序树的概念二叉排序树的添加节点二叉排序树的删除二叉排序树的概念二叉排序树(BST),对于二叉排序树的任何一个非叶子节点要求左边节点的值比当前节点的值小,右边节点的值要比当前节点的值大。当有与节点相同的值时,可以将该节点放在左子节点或者右子节点,感觉怪怪的,哈哈哈按照规则放之后,把一个无序的数组,放到了二叉排序树上之后,就是上图的样子。二叉排序树的添加节点思路:将第一个节点视为根节点,当传入一个新节点时,先判断新节点和根节点的值大小如果比根节点小,就放在根节点的左边,如果原创 2021-08-01 11:16:40 · 297 阅读 · 0 评论 -
二叉树知识之6赫夫曼树
赫夫曼树赫夫曼树的知识和代码实现1什么是赫夫曼树2创建赫夫曼树的步骤3赫夫曼树的代码实现赫夫曼树的知识和代码实现1什么是赫夫曼树给定n个权值作为n个叶子节点,构造成一棵二叉树,若树的带权路径长度最小(wpl)则称此树为最优二叉树。即赫夫曼树。2创建赫夫曼树的步骤给定一个无序的数组,进行赫夫曼树的创建步骤先将数组从小到大进行排序。取出根节点权值最小的两个树组成一颗新的树,该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和再将这两颗新的二叉树,以根节点的权值大小再次原创 2021-07-28 22:22:40 · 143 阅读 · 0 评论 -
八大排序算法的总结
八大排序算法的总结原创 2021-07-25 17:40:58 · 108 阅读 · 0 评论 -
时间复杂度
前一段时间以为自己Java学的不错就出去面试了,打算找一个暑期实习锻炼一下自己,本来以为开发做后端Java程序员可以跳过算法这些东西,结果面试官上来就问了时间复杂度的概念,因为本科学的不是计算机专业所以直接蒙圈,也给面试官留下了很不好的印象,后面问到java集合,redis等存取元素的时候,又问到了时间复杂度等概念,真是一步走不好,步步走不好,2021年暑假到了,从今天开始学习数据结构与算法,从哪跌倒就从哪爬起来,开始恶补算法和数据结构知识啦!下面步入正题:想要了解时间复杂度,必须要了解时间频度的概念1原创 2021-07-06 12:05:23 · 449 阅读 · 0 评论 -
八大排序算法之8堆排序算法
等我学到再说,先占一个坑,因为需要树的知识做支撑哒,学完那些在补充这一篇。原创 2021-07-21 11:06:51 · 197 阅读 · 0 评论 -
二叉树知识之5线索化二叉树
线索化二叉树线索化二叉树的引出线索二叉树的介绍线索二叉树的解释代码实现线索化思路代码实现线索化遍历的思路:综合测试代码:线索化二叉树的引出从上图中可以看出,叶子节点和某些节点如8,10,14,6的左右节点是没有连接的,并没有完全的用上,如果想充分的利用各个节点的左右指针,让各个节点指向自己的前后节点。故引入了线索二叉树的概念线索二叉树的介绍线索二叉树的规则:根据上图,可以看出n个节点的二叉树中,会有n+1个空指针域。利用二叉树链表中的空指针域,存放指向节点在某种遍历次序下的前驱和后继节点的指针原创 2021-07-25 10:17:35 · 268 阅读 · 0 评论 -
二叉树知识之4顺序存储二叉树
二叉树的顺序存储存储说明前序遍历代码实现中序遍历代码实现后序遍历代码实现总结:存储说明从数据结构看,数组的存储方式和树的存储方式可以相互转换,即数组可以变成树的结构,树也可以变成数组的结构,具体示意图如下。其中红色字体代表着数组的索引。黑色字体为具体的数值,读取数组时可以类似于树的结构输出。根据上图所得的顺序二叉树的特点:顺序二叉树通常只会考虑完全二叉树第n个元素的左子节点为2*n+1第n个元素的右子节点为2*n+2第n个元素的父节点为(n-1)/2n:表示二叉树中的第几个元素(按照0原创 2021-07-24 20:11:06 · 332 阅读 · 0 评论 -
二叉树知识之3节点的删除
二叉树的删除简单二叉树删除的思路简单删除的规定简单删除的思路简单删除的代码实现(以删除4号节点为例)复杂二叉树的删除复杂二叉树的删除规定复杂二叉树的删除思路复杂删除的代码实现(以删除5号节点为例)测试代码简单二叉树删除的思路简单删除的规定如果删除的是叶子节点,则删除该节点如果删除的节点是非叶子节点,则将该节点的子树一起删除简单删除的思路先判断是是不是空树,是空树则直接返回,该树的root节点是不是要删除的节点,如果是root节点,则直接将整个树置为null删除时先找到该要删除的节点的上原创 2021-07-23 17:10:43 · 1859 阅读 · 0 评论 -
二叉树的知识之2利用前中后遍历来查找特定的值
利用三种遍历来查找具体的值思路和代码实现利用前序遍历查找思路利用中序遍历查找思路利用后序遍历查找思路测试代码思路和代码实现利用前序遍历查找思路先确定当前节点是否是要查找的target如果是,则返回当前节点如果不是,则判断当前节点的左子节点是否为空,如果不为空则递归前序遍历查找如果左递归前序查找找到目标节点则返回,如果左递归没有找到,则判断右子节点是否为空,如果不为空,则继续向右遍历查找,最后返回结果。//前序查找;根节点-左子树-右子树 public NodeNN preOrde原创 2021-07-22 21:54:31 · 241 阅读 · 0 评论 -
二叉树知识之1二叉树的遍历
二叉树的知识1二叉树的遍历二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历测试代码:二叉树的遍历前序遍历:先输出根节点,在遍历左子树和右子树:1–2--3–4--5–6中序遍历:先遍历左子树,在输出父节点,在遍历右子树:2–3--1–5--4–6后序遍历:先遍历左子树,在遍历右子树,最后输出父节点:3–2--5–6--4–1注意可以根据父节点的输出顺序来判断遍历是什么遍历二叉树的前序遍历思路:先输出当前节点(初始的时候是父节点)如果左子节点不为空,则递归继续前序遍历如果右子节点不原创 2021-07-22 19:06:44 · 183 阅读 · 0 评论 -
哈希表的分析与代码实现
哈希表的结构与代码实现哈希表的结构二级目录三级目录哈希表的结构哈希表(hash table)又叫做散列表,是根据key值而直接进行访问的数据结构,它通过把key值映射到表中的一个位置来访问记录,来加快查找的速度。这个映射的函数叫做散列函数,存放记录的数组,叫做散列表二级目录三级目录...原创 2021-07-22 15:48:40 · 153 阅读 · 0 评论 -
排序算法的引入
文章目录排序算法的引入1排序算法的定义2排序算法的分类排序算法的引入1排序算法的定义排序算法:又称为排序,是将一组数据依照指定的顺序进行排列的过程。2排序算法的分类其中内部排序指的是:把数据加载到内存中进行排序。外部排序是指:数据量太大,无法全部加载到主存中,需要借助外界存储来进行排序。...原创 2021-07-17 21:31:05 · 147 阅读 · 0 评论 -
用递归实现迷宫并且比较最短路径(java)
文章目录迷宫的制作初始化二维数组中的数值利用递归实现路径搜索定义判断节点是否可以通过的方法比较最短路径测试代码结果迷宫的制作迷宫如下,可以看成一个二维数组,黑色的代表是墙,不能通过,黄色的代表迷宫的起点,红的代表终点。初始化二维数组中的数值令:1代表墙,表示不能通过 int [][] map=new int[7][8]; int plan1=0; int plan2=0; for(int i=0;i<7;i++){ m原创 2021-07-17 17:43:54 · 722 阅读 · 2 评论 -
分别用数组和链表实现栈结构
文章目录用数组实现栈的结构push方法的代码pop方法的代码遍历栈中的元素的方法测试代码利用链表实现栈的结构节点类信息push方法的代码pop出栈方法遍历方法测试代码测试结果我们都知道,栈的特点是后进先出,先进后出,也就是先进栈里的,最后才能出来。用数组实现栈的结构push方法的代码public boolean isFull(){ //如果top指向最后,则说明栈满 return maxsize-1==top; } public void push(int原创 2021-07-16 22:44:28 · 198 阅读 · 0 评论 -
约瑟夫问题的分析和实现(丢呀嘛丢手绢!)
文章目录约瑟夫问题的描述约瑟夫问题的抽象节点的信息1环形单向链表的创建思路2环节点的遍历约瑟夫问题的实现约瑟夫问题的抽象代码实现约瑟夫问题的描述丢手绢,sum个小朋友做成一圈,第一次从第k个人开始数,每次数m个则数到的人出列,直到只剩下1个人。输出出圈的顺序。约瑟夫问题的抽象节点的信息class Boy { public int no; public Boy next; public Boy(int no) { this.no = no; }原创 2021-07-15 21:57:13 · 195 阅读 · 0 评论 -
双向链表的知识
文章目录双向链表的知识介绍双向链表增删改查的思路和实现增加节点(直接加在链表的最后面)增加节点(按照顺序加入)情况1,加在两个节点之间情况2,直接加在节点的最后删除节点原理介绍代码实现修改节点代码实现:查找节点类似于单向链表的查找思路代码实现双向链表的知识介绍双向链表和单向链表类似,都可以实现数据的增删改查,不同点是双向链表中多了一个pre指向前一个节点。除了头节点head之外(没有前一个节点)每一个node都至少有三个属性节点值no指向下一个节点next指向前一个节点preclass D原创 2021-07-15 15:01:59 · 192 阅读 · 0 评论 -
有关于单链表的面试题
单链表的反转单链表基础请见我的这一篇文章原创 2021-07-15 13:44:50 · 105 阅读 · 0 评论 -
单向链表的增删改查
链表单链表介绍链表的真实结构结构分析链表的逻辑结构单链表的代码实现分析节点属性添加元素的方法add()(顺序添加,只能插在链表的尾部)添加元素的方法addByOrder()(可以判断no的值来排序)删除节点的方法delete()修改节点的方法update()显示元素的方法display()代码测试单链表介绍链表的真实结构结构分析从结构图中可以分析出链表是以节点的方式来存储值每一个节点包含了值和next节点链表的各个节点不一定是连续存储的链表分为带头节点的链表和不带头节点的链表链表的逻原创 2021-07-13 16:03:16 · 353 阅读 · 0 评论 -
队列和环形队列用数组的实现
队列队列简介队列实现思路分析存数据时思路:自定义的addQueue方法取数据时思路:自定义的removeQueue方法环形队列改进思路环形队列代码的实现总结队列简介队列就是一个有序的列表,可以用数组和链表来实现12345……遵循的原则是先入先出原则,先存入队列的数据,先被取出,后存入的数据,后被取出。图a是描述用数组实现队列的存元素,maxsize表示队列最大的容量。存的过程中,永远是从队尾存储元素,front指向队首的前一个位置,并且初始值为-1,rear指向队尾,初始原创 2021-07-12 21:39:10 · 323 阅读 · 0 评论 -
稀疏数组和二维数组的转换
0数据结构一位大牛曾经说过,程序=数据结构+算法,所以数据结构相当重要!数据结构分为两类,线性结构和非线性结构1.线性结构:作为最常用的数据结构,特点是数据元素之间存在一对一的对应关系线性结构有着两种不同的存储结构,即顺序存储结构(如数组)****和链式存储结构(如链表)顺序存储结构称为顺序表,顺序表中的存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素,以及相邻元素的地址信息常见的线性结构:数据,队列,链表和栈2.非线性结构:常见的非线原创 2021-07-12 14:02:47 · 136 阅读 · 0 评论