
数据结构
数据结构
abcnull
INTP男,好结交志趣相投的朋友,微信:a463279708,希望能共同努力进步!你们的支持将是我写下去的不竭动力......
展开
-
数据结构-二叉堆(大顶堆&小顶堆)
文章目录简介Java 实现时间复杂度一些疑问简介二叉堆就是一颗二叉树,是一颗完全二叉树,最直观表现一个二叉树左边最多比右边深 1 层,二叉堆我们常常讨论的就是大顶堆和小顶堆,其中大顶堆根结点最大,左右节点依次递归,小顶堆类似二叉堆算是一种比较重要的数据结构,实际中我们的堆排序就涉及到二叉堆,它也是优先级队列的基础所以这里我可以说下二叉堆的性质:完全二叉树完全二叉树比平衡二叉树条件更...原创 2020-04-30 22:47:15 · 1727 阅读 · 1 评论 -
数据结构-线索二叉树(线索化和遍历线索二叉树)
文章目录思路Java 实现思路声明线索二叉树结点中含有五个变量,分别是该结点存储的值,该结点指向的左右结点,该结点左右两边的索引值,当左右索引值为 false 就表示左右指向正常的孩子结点,若为 true 表示左右指向前驱或者后继结点为什么要线索化二叉树呢?我们知道对于一个满二叉树来讲,其叶子结点为2^(n-1)个,这些叶子空指针域有2^n个,这个 n 是树的深度,我们可以利用这些空指针...原创 2020-02-28 22:33:23 · 510 阅读 · 0 评论 -
数据结构-二叉树(求二叉树非叶子结点个数的递归与非递归算法)
文章目录思路Java 实现思路思路上也没啥的,和求二叉树结点个数或者说求二叉树叶子结点个数思路很像,博主的前几篇博文有讲Java 实现// 结点class Node { int data; Node left = null; Node right = null;}// 二叉树public class BinaryTree { // 根结点 ...原创 2020-02-26 21:54:16 · 7690 阅读 · 1 评论 -
数据结构-二叉树(求二叉树叶子节点数的递归和非递归算法)
文章目录思路Java 实现思路思路这一块没啥可说,递归主要是求左子树叶子结点数+求右子树叶子结点数,递归实现。非递归就是用到了栈,一个结点一个结点的保存,保存到叶子结点时候,就让叶子出栈,计数+1,然后让栈顶指向右结点再入栈循环执行即可Java 实现// 结点class Node { int data; Node left = null; Node right =...原创 2020-02-26 21:30:25 · 5854 阅读 · 0 评论 -
数据结构-二叉树(全)
文章目录简介Java 实现简介下面包括大量的二叉树的数据结构算法,包括各种遍历,深度计算,创建二叉树等等,且几乎都有递归和非递归的实现手段Java 实现// 结点class Node { int data; Node left = null; Node right = null;}// 二叉树public class BinaryTree { //...原创 2020-02-25 22:53:40 · 352 阅读 · 0 评论 -
数据结构-二叉树(先序+中序,中序+后序创建二叉树递归实现)
文章目录思路Java 实现思路为什么先序+中序,或者中序+后序可以创造一颗二叉树?因为先序可以知道这颗树的根,后序也可以知道这颗树的根,那么再去看中序,中序的根就找到了,中序根左边的子树是左子树,中序根右边的是右子树,也就是说通过先序先确定根,然后中序找到根与左右子树,然后对左子树递归找根,对右子树递归找根,一直找不到为止递归的思路是什么呢?以先序+中序举例,先序先找到根,然后中序可以划...原创 2020-02-25 22:31:02 · 1012 阅读 · 0 评论 -
数据结构-二叉树(层次遍历的非递归与递归算法)
文章目录思路Java 实现思路层次遍历与先序、中序、后序有什么直观的区别?层次遍历实际就是 BFS 算法,广度优先搜索,先序、中序、后序实际上是 DFS 算法,深度优先搜索,这个很容易理解,一个一层一层的搜索,一个先找到左边最深的那个结点。层次遍历与先/中/后序遍历的比较,DFS 和 BFS先序,中序,后序遍历支持递归实现,也支持利用栈来实现,因为是深度 DFS 算法,所以用栈是没有问题...原创 2020-02-24 00:09:05 · 2447 阅读 · 0 评论 -
数据结构-二叉树(统计二叉树的结点个数递归与非递归算法)
文章目录思路Java 实现思路求结点个数为什么能用递归?二叉树求结点个数,从根结点开始,求二叉树结点个数,对于根结点就是求左右子树所有结点数之和再加一,对于左右子树又是如此计算,这样的形式满足递归的思想,大问题化小问题,小问题有一个最终的出口,出口就是最下面那个结点左右子树为空,这样空节点的结点个数为 0如何用栈来思考二叉树结点个数?就是二叉树的遍历,先序中序后序,层次遍历皆可以,栈中的...原创 2020-02-23 16:43:59 · 6159 阅读 · 0 评论 -
数据结构-二叉树(计算二叉树深度的递归与非递归算法)
思路二叉树深度递归怎么去想问题?求二叉树的深度为什么可以用递归呢?这是因为我们这样思考问题:求一个二叉树的深度,我们即求根结点所在二叉树的深度,即求左右子树的最大深度,对于每个结点都是求左右子树的最大深度,这样就是把一个大的问题切分成小的问题,然后最小的问题有一个出口,结点为空时深度为 0二叉树的深度如果不用递归该怎么办?最直接的想法,就是使用栈,递归本来就是一种栈的方式,这时我们又联想到...原创 2020-02-23 16:03:45 · 1456 阅读 · 0 评论 -
数据结构-二叉树(复制二叉树的非递归算法)
文章目录思路Java 实现思路怎么写呢?就是二叉树遍历的非递归算法,前几篇博文有讲后序遍历值得的注意点在数据结构-二叉树(遍历二叉树的非递归算法)中有讲复制的非递归与遍历的非递归的区别遍历二叉树的非递归算法用到一个栈,而复制的话用到两个栈,一个存被复制的二叉树,一个存复制到的二叉树。新的二叉树永远跟着已经存在的二叉树的节奏走,已经存在的那颗二叉树找左结点,新的二叉树也找左结点,已经存...原创 2020-02-22 21:44:25 · 2693 阅读 · 0 评论 -
数据结构-二叉树(复制二叉树的递归算法)
文章目录思路Java 实现思路Java 对象满足深拷贝,直接赋值不就行了,为什么要复制呢?确实,Java 的对象赋值满足深拷贝,类似 C 中的地址赋值,那这样直接 a=b 不就行了,干嘛还要写复制的一个算法呢?因为我们的这个复制希望 a 的操作不会影响 b 这颗二叉树,但是 a 和 b 这两颗二叉树中保存到的数据值都是一样的,这就是我们复制的目的如何复制二叉树呢?其实就是写一遍遍历而已...原创 2020-02-22 21:27:22 · 3737 阅读 · 0 评论 -
数据结构-二叉树(先序、中序、后序遍历二叉树的非递归算法)
文章目录思路Java 实现思路上一篇博文我们讲了二叉树的递归算法,这里我们来写一波二叉树的非递归算法为什么说遍历二叉树可以用递归二叉树每个结点都满足某个遍历次序,然后从根结点开始遍历,这个流程非常满足递归的模型,就是一个大的问题按照某种方式可以划分为许多细小的问题,然后这些细小的问题又可以用同样的方式继续划分,直到为空或者说直到有个出口所有递归可以转化成非递归那非递归我该如何实现呢?这...原创 2020-02-22 21:11:36 · 1163 阅读 · 0 评论 -
数据结构-二叉树(先序、中序、后序遍历二叉树的递归算法)
思路二叉树的遍历满足递归的形式二叉树的遍历满足递归的思路,无论是先序的根左右,中序的左根右,还是后续的左右跟都是从根结点开始,对每个结点进行先序/中序/后序的遍历,每个结点都是如此,假如是先序根左右的遍历,我们先访问根结点,然后再是左结点,但是左结点没结束,对左结点又进行一遍根左右的遍历,那么对于左结点自己来说,他自己就是根结点了,然后进行根左右遍历,于是又对总根结点的左结点的左结点再来一次先...原创 2020-02-22 20:33:18 · 2232 阅读 · 0 评论 -
数据结构-链队
文章目录简介Java 实现简介链队就我们数据结构中通常说的队列,就是链式的队列,他也是线性表,FIFO,链式存储结构。队列还是很常见的,链队编写过程中还有一个小的细节点在下文中会做阐述,现在我们用 java 一起实现一遍吧!Java 实现逻辑思路链队入队出队只要记住 FIFO 的规则就行了,都蛮好实现,但是有一个细节点不得不注意一下,我们平常的惯性思维是初始条件 head = tail,...原创 2020-02-16 22:24:27 · 762 阅读 · 0 评论 -
数据结构-顺序循环队列
文章目录简介Java 实现简介顺序队列很简单,所以这里专门来实现顺序循环队列了,循环队列还是蛮有意思的,通过取模运算得到队列中的指定元素。顺序队列写法和顺序栈很相似这里就不实现了,这里就开始实现顺序循环队列!Java 实现逻辑思路顺序队列和顺序栈很相似,都是设置了头结点和尾结点,并且在空间上是连续的,都是线性表,只不过栈是 FILO,队列是 FIFO 罢了,这里我使用两个下标来实现队头和...原创 2020-02-16 21:20:23 · 805 阅读 · 0 评论 -
数据结构-链栈
文章目录简介Java 实现简介链栈是链式结构,对于顺序站来讲,java 在实现链栈上没有那么别扭,因为 java 无指针使用,所以对于链栈可以用对象的引用来实现链栈的结点,再设置一个 top 栈顶和 bottom 栈底,最初栈顶指向栈底,依据 FILO 的思想原则就很容易实现了Java 实现逻辑描述链栈有个特性是 FILO,即 first in last out,先进后出,永远在顶部去压...原创 2020-02-16 18:23:51 · 560 阅读 · 0 评论 -
数据结构-顺序栈
简介栈也是一个非常基础的数据结构,链表,栈,队列,二叉树这几个算是基本数据结构知识,这里主要做栈的实现,而且是顺序栈,同链表一样,栈也是线性表,有顺序栈也有链栈,像 java 这种将指针封装在底层的面向对象的语言在实现顺序表,顺序栈的时候会有点别扭,因为 c/c++ 有指针可以很方便的操作顺序栈,java 有引用但那是对于对象而言的,但同时 java 自己就有数组,数组本身就是一个线性结构,要是...原创 2020-02-16 12:43:30 · 825 阅读 · 0 评论 -
数据结构-双向循环链表
文章目录简介Java 实现简介单链表对应着单向循环链表,即原来单链表最后一个结点指向本来为空,现在指向头结点;双向链表对应着双向循环链表,即原来双向链表最后一个结点的后驱结点为空,现在指向头结点,原来双向链表的头结点是没有前驱结点的,现在双向循环链表的头结点的前驱结点指向双向循环链表的尾结点Java 实现逻辑思路逻辑上双向循环链表只不过是在双向链表上多加了循环这个条件,我们在初始化时候使...原创 2020-02-15 23:18:20 · 660 阅读 · 0 评论 -
数据结构-双向链表
文章目录简介Java 实现简介单链表有个缺点,那就是我们只能顺着一个方向找到尾,不能反方向往回找,因此我们自然而然想到双向链表Java 实现逻辑思路双链表比单向链表多了一个前去结点,所以比单链表要灵活一下,我们在插入结点或者删除结点时候需要考虑到四个连接,我们先考虑新结点的两个连接,然后我们在考虑新结点两边的两个结点的两个连接即可算法图解代码实现// 结点class Node ...原创 2020-02-15 22:42:54 · 327 阅读 · 0 评论 -
数据结构-单向循环链表
文章目录简介Java 实现简介单向循环链表,是在单向链表的基础上增加了循环这一个特性,单向循环链表可以使用两个结点,头结点和尾结点,但是如果只是用一个结点的话方便与两个单向循环链表的拼接Java 实现逻辑思路java 中没有指针的使用,因此 java 在链表的尾插法,插入和删除会有问题,因此这里我同样采用数组地址来代替指针的操作。这里我打算使用只有头结点没设尾结点的单向循环链表,因为这样...原创 2020-02-15 20:28:10 · 622 阅读 · 0 评论 -
数据结构-单链表
文章目录简介Java 实现简介单链表在逻辑上是线性的,在存储结构是却不是连续的,单链表同其名字一样为单向,单链表在数据结构中也算一种比较基础简单的结构Java 实现逻辑思路单链表只有一个方向,单链表逻辑上是线性的,链表中靠一个个的结点连接起来的,链表中存有数据和下一个结点的地址,单链表快在插入和删除上,对于从尾部添加和查找第几个元素会比较慢,对于插入的实现,将新结点指向单链表中的一个结点...原创 2020-02-14 00:07:43 · 378 阅读 · 0 评论 -
数据结构-顺序表
文章目录简介Java 实现简介顺序表应该是最简单的数据结构了吧,顺序表逻辑上是一个线性表,同时在物理存储上也是线性存储的结构,同样相对应的有一个链表,链表逻辑上线性存储上不满足线性的存储结构。java 数组就是一个线性表,由于 java 用不了 C 和 C++ 的指针,所以下面只能用数组来替代了线性表优势在于查找,劣势在于插入和删除,因为查找直接可以找到值,插入和删除则需要通过遍历重新调整表...原创 2020-02-13 15:37:51 · 507 阅读 · 0 评论 -
数据结构与算法总结与易错分析
文章目录排序算法总结和易错点分析冒泡排序快速排序简单选择排序堆排序直接插入排序折半插入排序希尔排序数据结构总结和易错点分析链表栈队列二叉树排序算法总结和易错点分析冒泡排序冒泡排序有两层循环,外面的循环是记录循环次数而已,我建议用i=1来算次数,这样更容易理解,如果写成i=0当然也行容易加大思维负担还有一点,我有时候写算法时候,写着写着一不留神就把冒泡的交换int temp = a...原创 2020-03-08 21:50:16 · 994 阅读 · 0 评论 -
数据结构-散列表(基础知识)
文章目录散列表散列函数散列表与平衡二叉树比较动态规划递归和回溯排序算法算法应用散列表散列表散列表称为 Hash 表,哈希表,Hash Table给定关键字,计算出关键字在表中的地址的数据结构。散列表建立了关键字和存储地址之间的直接映射关系散列函数散列函数把散列表中关键字映射为对应地址的函数,addr = Hash(key)散列函数是可能把两个或以上个关键字映射到同一地址下,...原创 2020-03-01 22:37:19 · 677 阅读 · 0 评论 -
数据结构-B+树(简介)
文章目录B+ 树简介B+ 树规则B+ 树应用好文推荐B+ 树简介B+ 树是基于 B-树的变体,比 B-树查询性能更强什么是卫星数据卫星数据就是索引元素指向的数据记录,就是索引指向的是数据库表中哪一行,对于 B-树来说每个结点都有卫星数据,对于 B+ 树来说只有叶子结点有卫星数据聚集索引和非聚集索引数据库表行中是物理顺序和键值的逻辑顺序相同,非聚集索引反之。对于聚集索引,B+ 树的叶子结...原创 2020-03-01 20:59:58 · 1090 阅读 · 0 评论 -
数据结构-B树(简介)
文章目录简介为什么有 B 树B 树规则B 树操作推荐 B 树好文简介B-树即 B 树,这里的 - 可不是减号而是横杠的意思,就是“B 杠树”或者直接说“B 树”。B 树这种数据结构在解决文件系统以及部分数据库索引上起到关键作用(其他有部分数据库使用 B+ 树解决索引问题)为什么有 B 树为什么二叉排序树不适合做索引树?因为如果我们利用传统的二叉排序树来读取指定元素时候,效率是非常高的(...原创 2020-03-01 19:16:09 · 669 阅读 · 0 评论 -
数据结构-红黑树RBT(简介)
文章目录红黑树简介构造红黑树思路红黑树的应用场景二叉树如何演替为红黑树?红黑树简介红黑树是一棵自平衡的二叉排序树,但是这个平衡注意了是弱平衡,而不是严格意义的平衡,平衡条件没有 AVL Tree 严格,红黑树的平衡条件是确保其没有一条路径比其他路径长出 2 倍。红黑树还具备如下性质:1.每个结点要么黑色要么红色2.根结点为黑色3.叶子结点必为黑色的空结点4.红色结点的两个子结点必为黑...原创 2020-02-29 22:46:58 · 482 阅读 · 0 评论 -
数据结构-自平衡二叉排序树AVL Tree(基础知识)
文章目录平衡二叉树简介自平衡二叉排序树的旋转自平衡二叉排序树的优势自平衡二叉排序树的缺陷自平衡二叉排序树的缺陷补漏平衡二叉树简介平衡二叉树 AVL Tree二叉树有一个最大的缺陷就是在最糟糕情况下,二叉树呈现单链表的数据结构。为了杜绝这个问题产生了中特定规则的树,其中一个非常著名的是平衡二叉树。平衡二叉树每个结点,其左右子树的深度之差的绝对值小于等于 1快在查找,删除和插入影响性能自平...原创 2020-02-29 20:01:22 · 919 阅读 · 0 评论 -
数据结构-二叉排序树BST(基础知识)
二叉排序树简介二叉排序树(BST)二叉排序树又称为二叉查找树,即 BinarySearchTree(BST),左子树所有结点值小于等于根结点值,根结点值小于等于右子树任意一个结点值,左右子树分别又是一颗二叉排序树这个很符合中序遍历的顺序对不对(#.#)二叉排序树的优势由于是二叉排序树,当我们要去寻找某个数值的结点时候会变得非常容易,为什么呢?因为形象的说二叉排序树通过根结点把一个结构分成...原创 2020-02-29 18:40:54 · 782 阅读 · 0 评论 -
数据结构-二叉树(基础知识)
二叉树关键名词结点的度:结点拥有几个直接子树,那它的度就是几树的度:树内各结点度的最大值叶子结点:度为 0 的结点非终端结点:度不为 0 的结点孩子结点:原结点的子树的根结点被称为原结点孩子双亲结点:原结点是其子树根结点的双亲兄弟结点:同一个双亲的孩子结点之间互为兄弟结点祖先结点:该结点往上经过根结点的那些结点成为祖先结点子孙结点:类比祖先结点层次:根在第一层,下面一次加一...原创 2020-02-22 20:00:18 · 1266 阅读 · 0 评论