![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 60
Andy2016
这个作者很懒,什么都没留下…
展开
-
线性表6 – 数据结构和算法11
线性表6 让编程改变世界Change the world by program 单链表的插入 我们先来看下单链表的插入。假设存储元素e的结点为s,要实现结点p、p->next和s之间逻辑关系的变化,大家参考下图思考一下:单链表的插入 我们思考后发觉根本用不着惊动其他结点,只需要让s->next和p->n转载 2015-11-16 16:56:32 · 465 阅读 · 0 评论 -
栈和队列3|进制转换 – 数据结构和算法25
栈和队列3:进制转换 让编程改变世界Change the world by program 从二进制到八进制 地球人都知道,我们学习编程常常会接触到不同进制的数,而最多的就是二进制、八进制、十进制、十六进制。鱼C人还知道,二进制是计算机唯一认识的,十进制是人们通常使用的。 那么,有没有谁知道八进制和十六进制呢?为什转载 2015-11-16 17:22:21 · 791 阅读 · 0 评论 -
线性表9 – 数据结构和算法14
线性表9 让编程改变世界Change the world by program 静态链表 这一节课,我们试图通过静态链表的讲解来瞻仰古人的伟大!(似乎人总要挂了之后才能变得伟大~_~)神马是静态链表呢?又跟古人能有半毛钱关系? 地球人都知道C语言是个伟大的语言,他的魅力在于指针的灵活性,使得它可以非常容易地操作内存转载 2015-11-16 17:01:56 · 510 阅读 · 0 评论 -
树、森林及二叉树的相互转换 – 数据结构和算法50
树、森林及二叉树的相互转换 让编程改变世界Change the world by program 树、森林及二叉树的相互转换 从一个屌丝逆袭高富帅的小故事说起。 在这一章节开始的时候我们是从一棵普通的树开始介绍,在满足树的条件下可以是任意形状,一个结点可以有任意多个孩子,这样对树的处理显然要复杂很多。 所以转载 2015-11-19 14:30:22 · 1753 阅读 · 0 评论 -
栈和队列1 – 数据结构和算法23
栈和队列 让编程改变世界Change the world by program 栈和队列 栈和队列 栈的定义 栈是一种重要的线性结构,可以这样讲,栈是前面讲过的线性表的一种具体形式。就像我们刚才的例子,栈这种后进先出的数据结构应用是非常广泛的。 在生活中,例如我们的浏览器转载 2015-11-16 17:20:00 · 421 阅读 · 0 评论 -
线性表5 – 数据结构和算法10
线性表5 让编程改变世界Change the world by program 头指针与头结点的异同 上节课我们提到了,头结点的数据域一般不存储任何信息,谁叫它是第一个呢,有这个特权。拿个小旗子即可:头指针与头结点的异同 那有童鞋就疑惑了,既然头结点的数据域不存储任何信息,那么头指针和头结点又有转载 2015-11-16 16:55:38 · 568 阅读 · 0 评论 -
线性表4 – 数据结构和算法09
线性表4 让编程改变世界Change the world by program 删除操作 所以删除算法的思路:如果删除位置不合理,抛出异常;取出删除元素;从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;表长-1。 实现代码:ListDelete.c 现转载 2015-11-16 16:54:21 · 585 阅读 · 0 评论 -
线性表2 – 数据结构和算法07
线性表2 让编程改变世界Change the world by program 线性表的抽象数据类型 上节课我们讲到了线性表的定义,讲到了所谓抽象数据类型就是把数据类型和相关操作捆绑在一起。那么我们接下来分析一下,线性表应该有什么样的相关操作呢? 还是回到小甲鱼组织大家春游的例子,小甲鱼把鱼油们按照规律安排成一队,转载 2015-11-16 16:39:59 · 627 阅读 · 0 评论 -
绪论 – 数据结构和算法01
数据结构绪论 让编程改变世界Change the world by program 数据结构和算法绪论 数据结构和算法这门计算机必修课历来无论在哪个学校,都是无比乏味和催人入睡的。但是,小甲鱼决定要投入大量的精力来将这门课程打造成有屎以来最为华丽的,最为欢乐地,最为图文并茂的课程! 因为,在中国,有一句古训:No转载 2015-11-16 16:13:01 · 551 阅读 · 0 评论 -
谈谈算法 – 数据结构和算法02
谈谈算法 让编程改变世界Change the world by program 谈谈算法 我们这门课程叫“数据结构和算法”,有鱼油可能会问这不是两门课程呢?为什么整在一起讲解呢?不是徒增我们的思想负担吗?矮油,这看来小甲鱼是有必要跟大家解释一下数据结构和算法的关系啦。 打个比方,其实数据结构和算法的关系就比好基友是转载 2015-11-16 16:21:33 · 751 阅读 · 0 评论 -
线性表7 – 数据结构和算法12
线性表7 让编程改变世界Change the world by program 单链表的整表创建 对于顺序存储结构的线性表的整表创建,我们可以用数组的初始化来直观理解。而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据这么集中,它的数据可以是分散在内存各个角落的,他的增长也是动态的。 对于每个链表来说,它所占转载 2015-11-16 16:57:40 · 384 阅读 · 0 评论 -
线性表8 – 数据结构和算法13
线性表8 让编程改变世界Change the world by program 单链表的整表删除 当我们不打算使用这个单链表时,我们需要把它销毁(真狠,不要就给别人嘛,还销毁~)。其实也就是在内存中将它释放掉,以便于留出空间给其他程序或软件使用。 单链表整表删除的算法思路如下:声明结点p和q;将转载 2015-11-16 17:01:19 · 447 阅读 · 0 评论 -
线性表3 – 数据结构和算法08
线性表3 让编程改变世界Change the world by program 线性表的顺序存储结构 我们可以想象,线性表有两种物理存储结构:顺序存储结构和链式存储结构。线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。 线性表(a1,a2,…,an)的顺序存储如下:线性转载 2015-11-16 16:41:49 · 635 阅读 · 0 评论 -
栈和队列4 – 数据结构和算法26
栈和队列4 让编程改变世界Change the world by program 栈的链式存储结构 讲完了栈的顺序存储结构,也给大家结合了一些例题演练,相信大家对栈再也不陌生了吧?现在我们来看下栈的链式存储结构,简称栈链。(通常我们用的都是栈的顺序存储结构存储,链式存储我们作为一个知识点,大家知道就好!)栈因为只是栈顶来做转载 2015-11-16 17:23:11 · 376 阅读 · 0 评论 -
栈和队列2 – 数据结构和算法24
栈和队列2 让编程改变世界Change the world by program 疑问解释 上节课我们讲解栈的结构,我们是这样声明的:typedef int ElemType; typedef struct{ ElemType *base; ElemType *top; int stackSize;}sqStack;转载 2015-11-16 17:20:47 · 494 阅读 · 0 评论 -
时间复杂度和空间复杂度2 – 数据结构和算法04
时间复杂度和空间复杂度2 让编程改变世界Change the world by program 算法时间复杂度 我们说好的时间复杂度和空间复杂度呢?历来大学老师在讲解这两个概念,都是直接登堂入室,导致八成学生对概念理解不深刻,或者说只是硬背起来而已。 为了让大家能够更好地接受这两个比较重要的概念,我们有了上一讲的准转载 2015-11-16 16:26:59 · 455 阅读 · 0 评论 -
时间复杂度和空间复杂度1 – 数据结构和算法03
时间复杂度和空间复杂度1 让编程改变世界Change the world by program 算法效率的度量方法 上一讲中我们提到设计算法要尽量的提高效率,这里效率高一般指的是算法的执行时间。那么我们如何来度量一个算法的执行时间呢? 所谓“是骡子是马拉出来遛遛”,比较容易想到的方法就是我们把算法跑若干次,然后拿个“计转载 2015-11-16 16:23:09 · 635 阅读 · 0 评论 -
线性表1 – 数据结构和算法06
线性表 让编程改变世界Change the world by program 感受线性表的存在 各位鱼油大家好,从今天开始小甲鱼带大家开始学习第一个数据结构:线性表先让我我们通过图片来感受一下,线性表的特性吧。感受线性表的存在 大家姑且可以把这幅图想象为小甲鱼组织鱼油们外出野营。因为咱鱼油队伍强转载 2015-11-16 16:38:44 · 698 阅读 · 0 评论 -
时间复杂度和空间复杂度3 – 数据结构和算法05
时间复杂度和空间复杂度3 让编程改变世界Change the world by program 函数调用的时间复杂度分析 如果我们把问题再实际化一点,大家是否能自己正确的分析出来呢?我们来看下边这个例子:Source code ( By http://www.fishc.com )转载 2015-11-16 16:36:08 · 527 阅读 · 0 评论 -
二叉树的建立和遍历算法 – 数据结构和算法47
二叉树的建立和遍历算法 让编程改变世界Change the world by program 有童鞋会说,我们上节课研究这么多遍历的方法干啥呢?聪明的鱼油们怎么看?!对于二叉树,思路方面我们已经谈得够多了,是时候由小甲鱼带大家来上机操作。 题目要求:建议二叉树并输出每个字符所在的层数。如右图要求输出A在第一层转载 2015-11-16 17:49:31 · 538 阅读 · 0 评论 -
线索二叉树 – 数据结构和算法48
线索二叉树 让编程改变世界Change the world by program 线索二叉树 为什么需要线索二叉树呢?我想正如程序猿发觉单链表并不总能满足他们设计的程序某些要求的时候,发明了双向链表来弥补一样,线索二叉树也是在需求中被创造的! 那普通的二叉树到底有什么缺陷让我们发指呢?一,浪费空间二转载 2015-11-16 17:50:12 · 712 阅读 · 0 评论 -
线性表17 – 数据结构和算法22
线性表17 让编程改变世界Change the world by program 双向循环链表实践 课堂演示题目: 要求实现用户输入一个数使得26个字母的排列发生变化,例如用户输入3,输出结果:DEFGHIJKLMNOPQRSTUVWXYZABC同时需要支持负数,例如用户输入-3,输出结果:XY转载 2015-11-16 17:19:16 · 404 阅读 · 0 评论 -
KMP算法之NEXT数组代码原理分析 – 数据结构和算法38
KMP算法之NEXT数组代码原理分析 让编程改变世界Change the world by program KMP算法之NEXT数组代码原理分析 NEXT数组:当模式匹配串T失配的时候,NEXT数组对应的元素指导应该用T串的哪个元素进行下一轮的匹配。 i(后缀)= 1 2 。3 4 5 6 7 。8 9j(转载 2015-11-16 17:41:07 · 565 阅读 · 0 评论 -
二叉树2 – 数据结构和算法44
二叉树2 让编程改变世界Change the world by program 二叉树的性质 二叉树的性质一:在二叉树的第i层上至多有2^(i-1)个结点(i>=1)这个性质其实很好记忆,考试的时候懂得画出二叉树的图便可以推出 二叉树的性质二:深度为k的二叉树至多有2^k-1个结点(k>=1)这里一转载 2015-11-16 17:47:16 · 443 阅读 · 0 评论 -
KMP算法之最终实现及优化 – 数据结构和算法39
KMP算法之最终实现及优化 让编程改变世界Change the world by program KMP算法之最终实现及优化 搞定了NEXT数组,KMP算法就易如反掌了。一起来完成:kmp.c KMP模式匹配算法改进 后来有人发现,KMP算法是有缺陷的。比如我们的主串 S =“aaaabcde”,子转载 2015-11-16 17:42:58 · 398 阅读 · 0 评论 -
KMP算法(养成篇2) – 数据结构和算法37
KMP算法(养成篇2) 让编程改变世界Change the world by program KMP算法之养成篇 为了照顾广大喜欢细嚼慢咽的朋友,小甲鱼再添加一讲继续深入探讨思路。这次我们给模式匹配串添加一个k数组(也就是KMP算法中非著名的next数组)。这是一个“智能”的数组,因为他指导着模式匹配串下一步改用第几号元素转载 2015-11-16 17:40:25 · 446 阅读 · 0 评论 -
字符串 – 数据结构和算法35
字符串 让编程改变世界Change the world by program 字符串 以前的计算机刚被发明的时候,主要作用是做一些科学和工程的计算工作,科学家发明计算机的时候压根儿不可能想到后人还可以用来看毛片。刚开始的计算机都是处理数值工作,后来引入了字符串的概念,计算机开始可以处理非数值的概念了(当然原理还是用数值来模拟非数值转载 2015-11-16 17:38:26 · 496 阅读 · 0 评论 -
递归和分治思想1 – 数据结构和算法31
递归和分治思想1 让编程改变世界Change the world by program 递归 妹子,甲鱼哥今天给你讲一个故事吧,从前我有个小弟,酷爱探险,有一次他进了一个山洞,然后又出来,然后又进去,然后又出来,然后又进去,然后又出来。。。。。。后来他很开心~艹,你说什么呢?妹子悟性真高^_^ 事实上递归就转载 2015-11-16 17:34:30 · 545 阅读 · 0 评论 -
线性表10 – 数据结构和算法15
线性表10 让编程改变世界Change the world by program 静态链表的插入操作 上节课我们说到,为了辨明数组中哪些分量未被使用,解决的方法是将所有未被使用过的及已被删除的分量用游标链成一个备用的链表。每当进行插入时,便可以从备用链表上取得第一个结点作为待插入的新结点。 可能这样说大家都还是难以转载 2015-11-16 17:03:20 · 404 阅读 · 0 评论 -
递归和分治思想3|汉诺塔 – 数据结构和算法33
递归和分治思想3:汉诺塔 让编程改变世界Change the world by program 汉诺塔 一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一转载 2015-11-16 17:36:57 · 589 阅读 · 0 评论 -
栈和队列8 – 数据结构和算法30
栈和队列8 让编程改变世界Change the world by program 队列的顺序存储结构 为什么小甲鱼上节课说队列的实现上我们更愿意用链式存储结构来存储?我们先按照应有的思路来考虑下如何构造队列的顺序存储结构,然后发掘都遇到了什么麻烦。我们假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的存储单元,并把转载 2015-11-16 17:31:41 · 430 阅读 · 0 评论 -
线性表16:双向链表 – 数据结构和算法21
线性表16 : 双向链表 让编程改变世界Change the world by program 这货我们地球人把他称为火车,有了它,全世界每年春季最大规模的物种迁移才会发生在中国! 双向链表 大家都知道,任何事物出现的初期都显得有些不完善。例如我们的火车刚发明的时候是只有一个“头”的,所以如果它走的线路是转载 2015-11-16 17:18:15 · 480 阅读 · 0 评论 -
线性表12|循环链表 – 数据结构和算法17
线性表12:循环链表 让编程改变世界Change the world by program 循环,顾名思义就是:绕。 打个比方,就是从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前 。。。。。。 对于单链表,由于每个结点只存转载 2015-11-16 17:05:22 · 555 阅读 · 0 评论 -
树的存储结构 – 数据结构和算法41
树的存储结构 让编程改变世界Change the world by program 树的存储结构 不好意思哈,这节课又需要大家搞脑子了。对于知识,你理解的越多,需要记住的就越少!上节课我们简单的介绍了树结构的强大,这节课我们来关心一下如何在内存中安排树这种结构的存放。 说到存储结构,就会想到我们前面章节讲过的顺序存转载 2015-11-16 17:44:39 · 480 阅读 · 0 评论 -
线性表11|单链表小结:腾讯面试题 – 数据结构和算法16
线性表11|单链表小结:腾讯面试题 让编程改变世界Change the world by program 静态链表的删除操作 我们的故事还没结束,小C看到小A和2B这样非法的勾当,内心觉得很不爽,一句话也不说就离开了队伍。。。。。。我们先在图上实践一下,然后研究代码: 静态链表的删除操作代码:L转载 2015-11-16 17:04:26 · 980 阅读 · 0 评论 -
二叉树的遍历 – 数据结构和算法46
二叉树的遍历 让编程改变世界Change the world by program 二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。这里有两个关键词小甲鱼给加红了:次序和访问 二叉树的遍历次序不同于线性结构,线性结构最多也就是转载 2015-11-16 17:48:49 · 468 阅读 · 0 评论 -
二叉树的存储结构 – 数据结构和算法45
二叉树的存储结构 让编程改变世界Change the world by program 二叉树的存储结构 树结构在计算机中的存储形式很多,可谓天马行空任你创造,只要能够按照要求完成任务即可。在前边的演示中,我们发觉很难单单只用顺序存储结构或者链式存储结构来存放。但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构或转载 2015-11-16 17:47:57 · 690 阅读 · 0 评论 -
二叉树 – 数据结构和算法43
二叉树 让编程改变世界Change the world by program 二叉树的定义 世上树有万千种,唯有二叉课上讲。这里的二叉是二叉树,因为二叉树使用的范围最广,最具有代表意义,因此我们重点讨论二叉树。二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不转载 2015-11-16 17:46:06 · 427 阅读 · 0 评论 -
KMP算法(养成篇) – 数据结构和算法36
KMP算法(养成篇) 让编程改变世界Change the world by program KMP算法 相信很多鱼油(包括小甲鱼自己)在刚开始接触KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。 KMP算转载 2015-11-16 17:39:17 · 554 阅读 · 0 评论 -
栈和队列7 – 数据结构和算法29
栈和队列7 让编程改变世界Change the world by program 神马是队列 这就是队列队列 这不是队列队列的定义 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。与栈相反,转载 2015-11-16 17:28:25 · 389 阅读 · 0 评论