![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
带翅膀的猫
天天写BUG的软件开发工程师~
展开
-
剑指Offer:在O(1)时间内删除链表结点
题目:给定单向链表和一个指定的结点,定义一个函数在O(1)时间删除该结点。 在以往的删除结点中我们所用的方法是从头结点开始一个个的遍历到指点结点的前一个结点再进行删除,因为我们无法通过当前结点找到前一个结点,这种方法的时间复杂度为O(n)。 现在摆在我们面前的一个问题就是我们是不是一定要得到删除结点的前一个结点呢?答案是否定的。我们应该换一种思路进行删除:将要删除结点的原创 2018-01-30 20:00:49 · 3975 阅读 · 0 评论 -
详细图文——AVL树
平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。快来学习吧!详细图文。原创 2019-04-09 16:30:51 · 121875 阅读 · 79 评论 -
详细图文——Trie
本文介绍了字典树相关概念,完成了字典树的创建,查找,前缀串的判断和字典树的删除。原创 2019-03-27 19:26:49 · 16613 阅读 · 0 评论 -
详细图文——线段树
线段树的基本认识和代码。如果您是为了竞赛,那么此文章一定不适合您;如果您只是好奇,或者想了解一下,点进来吧!!^_^通过此文您能了解什么是线段树,线段树的使用场景和自己实现线段树。原创 2019-03-22 18:15:23 · 3517 阅读 · 0 评论 -
详细图文——最大堆
二叉堆是一种特殊的堆,二叉堆是完全二叉树。本文讲解了最大堆的实现过程,尤其是堆的调整操作——siftUp和siftDown。阅读完本文您可以自己实现最大堆了。原创 2019-03-20 20:40:33 · 11000 阅读 · 2 评论 -
详细图文——二分搜索树
上一篇→树与二叉树       与普通的二叉树相比,二叉搜索树中的数据是有序的,它遵循以下规则:根结点值大于它的左孩子,根结点的值小于它的右孩子,同时每一棵子树也是二叉搜索树。如下图是一棵二叉搜索树。二叉搜索树初步   &nb原创 2018-11-22 20:42:04 · 8533 阅读 · 1 评论 -
详细图文——树与二叉树
本文从树的概念说起,介绍了树的相关概念。同时本文介绍了二叉树的相关概念,实现了二叉树的先中后遍历方式(递归和非递归),层序遍历,二叉树的镜像,查找等相关操作。原创 2018-11-11 19:42:52 · 4362 阅读 · 0 评论 -
详细图文——双向链表
前篇->有序链表 在传统链表中我们寻找下一个结点是否方便,但是如果要追溯前面的结点是比较困难的。 双向链表提供了反向遍历的能力。其秘密在于每个结点有两个指向其他结点的引用,一个指向前继结点,一个指向后继结点。下图显示原创 2018-11-04 21:16:15 · 7331 阅读 · 4 评论 -
详细图文——双端链表
前篇:单链表 双端链表与单链表十分相似,不同的是它新增一个对尾结点的引用。双端链表不是双向链表。 在单链表中在尾部插入一个结点需要一个个遍历到尾结点再插入,这样的效率太低了,使用双端链表就是否方便了。实现代码Link类:p原创 2018-11-02 21:44:00 · 5305 阅读 · 4 评论 -
详细图文——有序链表
前篇->双端链表       在某些应用场景中我们需要链表中的数据是有序的,例如优先级队列,堆。如果有有序链表就好了。我们可以获得链表中的最大或者最小值(看你是啥样的排序)。    &原创 2018-11-04 16:36:31 · 4487 阅读 · 0 评论 -
详细图文——栈
什么是栈?栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。栈的类比原创 2018-01-06 14:58:39 · 4506 阅读 · 1 评论 -
详细图文——栈的使用案例:单词逆序和符号匹配检查
上一篇–>栈案例1:单词逆序不使用栈我们的方法是对称位置交换的方法: 我们可以利用栈后进先出原则我们可以很简便的实现逆序: 实现代码://使用栈实现单词逆序public class WordReverse { public static void main(String[] args) { String str = "Hello,My name is CSDN.I原创 2018-01-06 17:54:32 · 4166 阅读 · 0 评论 -
详细图文——队列
什么是队列?队列(queue)在计算机科学中,是一种先进先出的线性表。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。 有了栈的基础理解队列就简单多了,它和栈类似,只是一端出,一端进。遵循先进先出原则。队列的类比食堂打饭的排队就是一原创 2018-01-07 20:57:34 · 3906 阅读 · 0 评论 -
详细图文——链表
链结点链表是由一个个的链结点链接而成的,一个链结点由数据域(存放数据的部分)data和引用域(下一个结点的引用)next,下图显示了这一关系: 下面是一个链结点定义的一部分:public class LinkNode { private int idata;//数据域,这里的数据域只存放一个数,如果有很多的数据我们可以将数据封装一下 private Link原创 2018-01-19 17:38:04 · 4020 阅读 · 0 评论 -
链表实现栈和队列
在之前的博文中详细介绍了栈的数组方式实现和队列的数组方式实现学习了链表当然要再实现一波咯!单链表实现栈单链表相关代码下载import javax.management.RuntimeErrorException;/** * 使用链表实现栈 * @author Mr.Hu * */public class...原创 2018-11-03 22:07:06 · 3813 阅读 · 0 评论 -
详细图文——循环队列
上一篇–>队列在上一篇的最后我们思考了一般队列的最大缺点,那就是浪费空间。本篇讲解循环队列(有时又叫“缓冲环”),大大利用队列的空间。 循环队列没有空间的浪费。循环队列Java代码1、有记录数据项nitems的循环队列//循环队列public class LoopQueue { private Integer[] queue; private int m原创 2018-01-08 21:51:19 · 4420 阅读 · 8 评论 -
详细图文——优先级队列
上一篇–>循环队列 优先级队列是比栈和队列更专用的数据结构,它与普通队列相比会对数据项根据某一关键字进行排序从而决定哪些数据项在前面。 在生活中我们会遇到多件事情在手的情况,这时我们总是按照某种排序方式分别做这些事情,这就是优先级队列的体现。 在本篇中我以读信(Letter)作为一个例子,Letter中有一属性—priority,此属性越大表明优先级越高。原创 2018-01-18 21:49:37 · 3922 阅读 · 0 评论 -
详细图文——并查集
本文将带领大家迈入并查集的大门,这是一棵奇怪的树。通过本文您一定会了解并查集的实现,优化策略。原创 2019-04-03 19:56:16 · 3572 阅读 · 0 评论