
数据结构
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
五、数据结构笔记:串 [二] ( KMP模式匹配算法 )
KMP模式匹配算法 (朴素算法的升级版本)原理:主串 S: “abcdefgab”找到 子串T “abcdex” 的位置如果采用朴素算法,前5个字母,两个串完全相等,直到第6个字母,"f"与“x”不等,如图如图,按照朴素模式匹配算法,应该是如图②③④⑤⑥。即主串S中当i = 2,3,4,5,6时,首字符与子串T的首字符俊不等。仔细观察,子串T “abcde...原创 2019-01-23 18:06:55 · 5608 阅读 · 0 评论 -
30张图带你彻底理解红黑树
写在前面终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑问,那么本文对你会有帮助,本文帮助你全面、彻底地理解红黑树!本文将通过图文的方式讲解红黑树的知...转载 2019-03-12 13:10:54 · 4620 阅读 · 5 评论 -
Hash算法总结
1. Hash是什么,它的作用先举个例子。我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人很多,身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人,但显然,这样做并不实际。而指纹看上去是一种不错的选择,虽然一些专业组织仍然可以模拟某个人的指纹,但这种代价实在太...转载 2019-03-02 16:04:20 · 2680 阅读 · 0 评论 -
六、数据结构笔记:树[一](基本知识与存储方式)
树的定义之前一直介绍的是一对一的线性结构,可现实中还有多一对多的情况需要处理,这就是今天要介绍的一对多的数据结构——树。树(Tree):是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:有且仅有一个特定的称为根(Root)的结点; 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、···、Tm,其中每一个集合本身又是一颗树,并且...原创 2019-01-23 04:02:20 · 5260 阅读 · 0 评论 -
五、数据结构笔记:串 [一] (定义 & 朴素的模式匹配算法)
串的定义:是由零个或多个字符组成的有限序列,又叫字符串。 一般记为 s=“a1a2a3...an"(n>=0),其中,s是字符串的名称,用双引号括起来的字符序列是串的值,注意引号不属于串的内容。ai可以是字母、数字或者其他字符,i是该字符在串中的位置。串中的字符数目n称为串的长度,定义中谈到的有限是指长度n是一个有限的数值。零个字符的串称为空串,它的长度为0,可以直接用两个双引号...原创 2019-01-22 20:37:46 · 5309 阅读 · 0 评论 -
四、数据结构笔记:栈与队列
栈(stack):是限定仅在表尾进行插入和删除操作的线性表。队列(Queue):是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。定义栈(stack):是限定仅在表尾进行插入和删除操作的线性表。我们允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称作后进先出(Last In First Out)的线性表。*...原创 2019-01-22 17:03:23 · 5239 阅读 · 0 评论 -
三、数据结构笔记:线性表
线性表(List):零个或多个数据元素的有限序列 线性表,从名字上可以感觉到,是具有像线一样的性质的表。注意;首先它是一个序列。也就是说,元素之间是有序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素有且只有一个前驱和后继。 线性表强调有限,元素个数是有限的。其结构如下图: 线性表元素的个数n(n≥0)定义为线性表的长度,当n...原创 2019-01-22 14:06:13 · 5682 阅读 · 0 评论 -
二、数据结构笔记: 算法
算法定义: 解决特性问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法具有五个基本特性。输入 算法具有零个或多个输入 输出 算法至少有一个或多个输出 有穷性 算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且一个步骤在可接受的时间内完成。 确定性 算法的每一个步骤都具有确定的含义,...原创 2019-01-22 10:04:22 · 5222 阅读 · 0 评论 -
一、数据结构笔记: 绪论
基本概念&术语: 数据结构是相互之间存在一种或多种特定关系的数据元素集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等问题的学科。 数据 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 数据元素 是组成数据的、有一定意义的基本单位,在计算机中通常作为...原创 2019-01-21 12:14:01 · 5424 阅读 · 1 评论 -
七、数据结构笔记:树、森林、二叉树的转换与查询
在介绍树的存储结构时,就说到了树的孩子兄弟表示法可以将一棵树用二叉链表进行存储,所以借助二叉链表,树和二叉树可以互相转换。从物理结构上来看,它们的二叉链表也是相同的,只是介绍不太一样而已。因此,只要我们设定一定的规则,用二叉树来表示树,甚至表示森林都是可以的,森林和二叉树也可以互相进行转换。树转换为二叉树将树转换为二叉树的步骤如下: 加线:在所有的兄弟结点之间加一条连线; ...原创 2019-01-24 15:42:36 · 4632 阅读 · 0 评论 -
六、数据结构笔记:树[四]( 二叉树遍历)
二叉树遍历原理 二叉树的遍历:是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次。 这里有两个关键词:访问和次序。访问其实是要根据实际的需要来确定具体做什么,比如对每个结点进行相关计算,输出打印等。它算作是一个抽象操作。二叉树的遍历次序不同于线性结构,最多也就是从头到尾、循环和双向等简单的遍历方式。树的结点之间不存在唯一的前驱和后...原创 2019-01-24 14:33:37 · 4646 阅读 · 0 评论 -
六、数据结构笔记:树[三]( 二叉树存储结构 )
数据结构——二叉树的存储结构之前已经谈过了树的存储结构,并且说到顺序存储对树这一种一对多的关系的结构实现起来比较困难。但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现。二叉树的顺序存储结构二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标,要能体现结点之间的逻辑关系,如双亲与孩子的关系,左右兄弟的关系等。先来看完全二叉树...原创 2019-01-24 10:35:21 · 4596 阅读 · 0 评论 -
六、数据结构笔记:树[二]( 二叉树以及性质)
二叉树定义二叉树:是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。如下图就是一个二叉树: 二叉树特点二叉树的特点有: 每个结点最多两个子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一棵子树都是可以的。 左子树和右子...原创 2019-01-23 23:50:04 · 5330 阅读 · 0 评论 -
如何设计实现一个LRU Cache?
1. 什么是LRU Cache?LeetCode上看到一个LRU Cache实现的题目,题目描述是这样的esign and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations:getandset.get(key)-...原创 2019-07-11 11:02:41 · 1185 阅读 · 4 评论