数据结构学习笔记
记录自己在学习数据结构过程中的学习笔记,收获的知识并分享经验。
朝 花 拾 夕
这个作者很懒,什么都没留下…
展开
-
java实现常见查找算法
查找 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。在互联网上查找信息是我们的家常便饭。所有这些需要被查的数据所在的集合,我们给它一个统称叫查找表。查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。关键字(Key)是数据元素中某个数据项的值,又称为键值,用它可以标识一个数据元素。也可以标识...原创 2017-06-15 22:04:44 · 25424 阅读 · 11 评论 -
Java实现常见的排序算法
1、排序的基本概念与分类排序是我们生活中经常会面对的问题。同学们做操时会按照从矮到高排列;老师查看上课出勤情况时,会按学生学号顺序点名;高考录取时,会按成绩总分降序依次录取等。那排序的严格定义是什么呢?假设含有 n 个记录的序列为{r1,r2,......,rn}, 其相应的关键字分别为{k1,k2,......,kn} ,需确定 1, 2……, n 的一种排列 p1,p2,.原创 2017-05-13 15:37:29 · 3452 阅读 · 0 评论 -
Java实现二叉树的遍历
6.8 遍历二叉树假设,我手头有20张100元的和2000张1元的奖券,同时洒向了空中,大家比赛看谁最终捡的最多。如果是你,你会怎么做?相信所有同学都会说, 一定先捡100元的。道理非常简单,因为捡一张100元等于1元的捡100张,效率好得不是一点点。所以可以得到这样的结论,同样是捡奖券,在有限时间内,要达到最高效率,次序非常重要。对于二叉树的遍历来讲,次序同样显得很重要。二叉原创 2017-04-07 21:07:08 · 5306 阅读 · 2 评论 -
树的三种存储结构
6.2树的定义之前我们一直在谈的是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构----"树",考虑它的各种特性,来解决我们在编程中碰到的相关问题。树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>O)个互不相交原创 2017-03-19 19:46:38 · 37507 阅读 · 6 评论 -
串-KMP模式匹配算法
5.7 KMP 模式匹配算法你们可以忍受朴素模式匹配算法的低效吗?也许不可以、也许无所谓。但在很多年前我们的科学家们,觉得像这种有多个0和1重复字符的字符串,却需要挨个遍历的算法是非常糟糕的事情。于是有三位前辈,D.E.Knutb、J.H.Morris和Y.R.Pratt(其中Knuth和Pratt共同研究,Morris独立研究)发表一个模式匹配算法,可以大大避免重复遍历的情况,我们把它称原创 2017-03-17 22:47:43 · 1811 阅读 · 0 评论 -
串-定义和模式匹配算法
5.2 串的定义今天我们就是来研究"串"这样的数据结构。先来看定义。串( string )是由零个或多个字符组成的有限序列,又名叫字符串 。一般记为s= "a1a2......an"(n>0),其中,s是串的名称,用双引号(有些书中也用单引号)括起来的字符序列是串的值,注意单双引号不属于串的内容。ai(1串中的字符数目n称为串的长度,定义中谈到"有限"是指长度n是一个有限的原创 2017-03-12 21:38:59 · 2782 阅读 · 0 评论 -
线性表-链式存储结构
3.6 线性表的链式存储结构3.6.1 顺序存储结构不足的解决办法前面我们讲的线性表的顺序存储结构。它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素,这显然就需要耗费时间。能不能想办法解决呢?要解决这个问题,我们就得考虑一下导致这个问题的原因。为什么当插入和删除时,就要移动大量元素,仔细分析后,发现原因就在于相邻两元素的存储位置也具有邻居关系。它们编号是1,2,原创 2017-03-12 17:52:10 · 3290 阅读 · 0 评论 -
线性表-定义和顺序存储结构
3.1 开场白各位同学,大家好。今天我们要开始学习数据结构中最常用和最简单的一种结构,在介绍它之前先讲个例子。我经常下午去幼儿园接送儿子,每次都能在门口看到老师带着小朋友们, 一个拉着另一个的衣服,依次从教室出来 。而且我发现很有规律的是,每次他们的次序都是一样。比如我儿子排在第 5 个,每次他都是在第 5 个,前面同样是那个小女孩,后面一直是那个小男孩。这点让我很奇怪,为原创 2017-02-26 19:51:16 · 2845 阅读 · 0 评论 -
算法-时间复杂度和空间复杂度
2.9 算法时间复杂度2.9.1 算法时间复杂度定义在进行算法分析时 , 语句总的执行次数 T ( n )是关子问题规模n的函数,进而分析 T ( n )随 n 的变化情况并确定T(n)的数量级。 算法的时间复杂度,也就是算法的时间量度,记作: T(n)=O(f(n))。 它表示随问题规模 n 的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂原创 2017-02-23 21:40:09 · 7976 阅读 · 0 评论 -
算法-效率的度量和函数的渐进增长
2.7 算法效率的度量方法刚才我们提到设计算法要提高效率 。这里效率大都指算法的执行时间 。 那么我们如何度量一个算法的执行时间呢?正所谓"是骡子是马,拉出来遛遛"。比较容易想到的方法就是,我们通过对算法的数据测试,利用计算机的计时功能,来计算不同算法的效率是高还是低。2.7.1 事后统计方法事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同原创 2017-02-23 21:28:23 · 4826 阅读 · 0 评论 -
算法-简介
算 法 :算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。2.1 开场白各位同学大家好。上次上完课后,有同学对我说,老师,我听了你的课,感觉数据结构没什么的,你也太夸大它的难度了。是呀,我好像是强调了数据结构比较动脑子 ,而上次课,其实还没拿出复杂的东西来说道。不是不想,是没必要,第一次课就把你们糊弄晕,那以后还玩什么,原创 2017-02-22 22:40:33 · 930 阅读 · 0 评论 -
Java递归求解汉诺塔问题
汉诺塔问题规则:1.每次只能移动一个圆盘。2.圆盘可以插在X,Y,Z中的任一塔座上。3.任何时刻都不能让一个大的圆盘落在小的圆盘上面。算法:1.当X塔只有1个盘子时,将编号为1的圆盘从X移到Z处。(编号自上而下,由小到大)2.当X塔有2个盘子时,将编号为1的圆盘从X移动到Y处,接着将编号为2的圆盘从X移动到Z处,最后将编号为1的圆盘从Y移到Z处。3.当X塔有3个原创 2017-02-21 21:44:52 · 2031 阅读 · 0 评论 -
Java实现括号匹配校验
检测括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。/** * 括号匹配校验 * [ ( [ ] [ ] ) ] * 1 2 3 4 5 6 7 8 */public class BracketMatchTest { public static void main(String[] args) { // TODO Auto-generated method stu原创 2017-02-21 21:44:12 · 6263 阅读 · 0 评论 -
数据结构绪论-逻辑结构与物理结构
按照视点的不同, 我们把数据结构分为逻辑结构和物理结构。1.5 . 1 逻辑结构逻辑结构:是指数据对象中数据元素之间的相互关系。其实这也是我们今后最需要关注的问题。 逻辑结构分为以下四种 :1. 集合结构集合结构:集合结构中的数据元素除了 同属于一个集合外,它们之间没有其他关系。 各个数据元素是"平等'的,它们的共同属性是"同属于一个集合"。数据结构中的集合关系就类似于数学中的原创 2017-02-21 21:42:26 · 1516 阅读 · 0 评论 -
数据结构绪论-基本概念和术语
程序设计 = 鼓据结构+算法说到数据结构是什么,我们得先来谈谈什么叫数据。正所谓"巧妇难为无米之炊',再强大的计算机,也是要有"米'下锅才可以干活的,否则就是一堆破铜烂铁。 这个"米"就是数据。1.4. 1数据数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图像、视频等原创 2017-02-21 21:40:28 · 781 阅读 · 0 评论 -
常用数学公式推导及概念
常用数学公式及概念:1.连续求和求解:1+2+3+.....+n首尾相加n(n+1)/22.平方和求解:1^2+2^2+3^2+...+n^2根据恒等式(n+1)^3=n^3+3n^2+3n+1(n+1)^3-n^3=3n^2+3n+1,n^3-(n-1)^3=3(n-1)^2+3(n-1)+1............................原创 2017-02-21 21:14:02 · 8608 阅读 · 0 评论