数据结构
LySong_
Keep Coding
展开
-
一文带你搞懂AVL树
欢迎访问我的个人博客文章目录一.先看一个案例二.基本介绍1.举例说明二.构建的方式1.计算左右两子树高度2.左旋转实现方式3.右旋转实现方式4.存在的问题三.代码实现一.先看一个案例这是二叉排序树会存在的一个问题,先看案例:给定一个数列为{1,2,3,4,5,6},将这个数列转换为二叉排序树根据二叉排序树的性质可以得到这样的二叉排序树,这样的树有这么几个问题:左子树全部为空,从形...原创 2020-03-20 16:37:49 · 533 阅读 · 0 评论 -
分享一下我最近学数据结构的思维导图(持续更新)
欢迎访问我的个人博客(点击进入)这就是我目前的学习进程 即将开始图的学习和各种算法 这个思维导图可以供大家学习做参考 因清晰度原因请放大观看持续更新ing…...原创 2020-03-18 18:40:11 · 245 阅读 · 0 评论 -
数据结构与算法-二叉排序树(创建,搜索,遍历与删除)
欢迎访问我的个人博客(点击进入)1.概念一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的结点。2.添加的思路首先判断传入的结点是否为空如果传入结点的值小于当前结点的值2.1 如果当前结点的左子节点为空...原创 2020-03-18 13:56:03 · 481 阅读 · 0 评论 -
数据结构与算法-排序算法(堆排序)
欢迎访问我的个人博客(点击键入)一.堆排序简介堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点1.什么是堆?堆是具有以下性质的完全二叉树堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。2.堆排序中会用到的几个公式这些公式,实质...原创 2020-03-16 12:51:45 · 278 阅读 · 0 评论 -
数据结构与算法-二叉树(前序中序后序)Java实现
欢迎访问我的个人博客(点击进入)1.概念在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。2.二叉树的遍历方式遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于...原创 2020-03-14 11:56:10 · 250 阅读 · 0 评论 -
数据结构与算法-哈希表(java实现)
1.概念欢迎访问我的个人博客(点击进入)散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为...原创 2020-03-13 11:39:59 · 174 阅读 · 0 评论 -
数据结构与算法-排序算法(归并排序)
一.介绍欢迎访问我的个人博客归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。二.算法思路将进入递归的数组,按照传入的left,...原创 2020-03-12 12:31:28 · 156 阅读 · 0 评论 -
数据结构与算法-排序算法(快速排序)
一.简介快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。二.算法思路通过一趟排序将要排序的数据分割为两部分,其中一...原创 2020-03-12 12:20:34 · 158 阅读 · 0 评论 -
数据结构与算法-排序算法(希尔排序)
1.介绍欢迎访问我的个人博客(点击进入)希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序也是插入排序的一种,是对插入排序的一种升级,解决了在插入排序过程中,元素交换次数过多的问题(当插...原创 2020-03-11 11:29:01 · 278 阅读 · 0 评论 -
数据结构与算法-排序算法(插入排序)
1.算法原理插入排序属于内部排序法,是对欲排序的元素以插入的方式寻找该元素的适当位置,以达到排序的目的思想:欢迎访问我的个人博客(点击进入)把n个待排序的元素看成一个有序表和无序表开始时有序表只包含一个元素,即a[0],无序表就是有序表后面的n-1个元素每次从无序表中取出一个元素,与有序表一次比较,将他插入到合适的位置插入排序类似于打扑克牌时整理牌的动作,将牌插入到合适的位置...原创 2020-03-11 11:13:26 · 186 阅读 · 0 评论 -
数据结构与算法-排序算法(简单选择排序)
1.算法原理简单选择排序同上文冒泡排序一样,是一种简单的排序算法欢迎访问我的个人博客(点击进入)在整个数组中找到一个最小的元素和第一个元素arr[0]交换再从数组的下标1开始的后面的元素中找到最小的元素和arr[1]交换再从数组的下标2开始的后面的元素中找到最小的元素和arr[2]交换以此类推,知道数组倒数第二个数字 ,即arr[length - 2],停止,代表排序完毕2.算...原创 2020-03-11 10:42:19 · 440 阅读 · 0 评论 -
数据结构与算法-排序算法(冒泡排序)
1.算法原理冒泡排序作为一种简单的排序算法,通常是学习过程中接触到的第一种排序算法 欢迎访问我的个人博客(点击进入)比较相邻的元素。如果第一个比第二个大,就交换他们两个对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数针对所有的元素重复以上的步骤,除了最后一个(arr.length - 1)持续每次对越来越少的元素重复上面的步骤,直到没...原创 2020-03-11 10:32:45 · 182 阅读 · 0 评论 -
数据结构-栈(三)逆波兰计算器(Java)
1.逆波兰表达式逆波兰表达式又叫做后缀表达式。逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasewicz)于1929年首先提出的一种表达式的表示方法 [1] 。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。逆波兰表达式是一种十分有用的表达式,它将复杂表达式转换为可以依靠简单的操作得到计算结果的表达式。例如(a+b)(c+d...原创 2020-03-08 17:08:23 · 208 阅读 · 0 评论 -
数据结构-栈(一)数组模拟栈的实现
一.栈的概念栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(来源于百度百科)对上述的概念进行总结得到栈的几个特征栈是线...原创 2020-03-08 15:34:10 · 179 阅读 · 0 评论 -
单向环形链表解决约瑟夫环问题(Java实现)
一.概念单向环形链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。二.约瑟夫环问题约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。问题分析:首先确定使用的数据...原创 2020-03-06 13:29:56 · 356 阅读 · 1 评论 -
双向链表java实现
一.概念与上文的单链表不同,双向链表中有两个指针,next(指向下一个结点),pre(指向上一个结点),如图示 双向链表的好处:遍历时可从前往后也可以从后往前,弥补了单链表只能从前往后遍历的不足二.双向链表操作思路分析1.遍历双向链表的遍历思路与单向链表相同,可以看我上篇文章2.添加找到最后一个结点temp.next=newNodenewnode.pre=temp...原创 2020-03-06 12:50:26 · 145 阅读 · 0 评论 -
单链表的java实现(图文解说)
1.链表(LinkedList)的介绍总结上图:链表是一个有序的列表链表不同于数组,链表是以结点的形式存储,在物理空间上不一定连续链表的每个结点的内部包含data(数据)域,next(指针)域,指针域指向下一个结点的位置链表的头结点不存储数据,只是为了指向链表的开头2.数据声明由上图的分析可知,每个结点应该包括两部分,一部分为数据,一部分为指针,指向下一个区域,所以我们可以这样...原创 2020-03-04 20:24:36 · 3347 阅读 · 2 评论 -
数据结构-队列(数组实现)
一.概念队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。通俗来讲队列的特点是,先进先出。类似于现实中的排队买票,先来的先买票,后来的后买票,不能插队。通过概念可以总结出:队列是有序列表,可以用数组,链表实现(本文使用数组实现)...原创 2020-03-02 20:03:30 · 402 阅读 · 0 评论 -
数据结构-稀疏数组
一.概念当一个数组大部分元素为0,或者为同一值时,用稀疏数组来进行保存,以达到节省空间的目的。二.解决问题的思路1.记录共几行几列,有多少不同的值2.把具有不同值的元素的行列以及值保存在一个小规模数组中,缩小规模。图示:三.二维数组转稀疏数组遍历原有数据,得到有效数据的个数sum根据sumchuangjian sparseArr int[sum + 1][3]将二维数组数据存...原创 2020-03-02 19:13:18 · 146 阅读 · 0 评论