KMP算法(养成篇2) – 数据结构和算法37
KMP算法(养成篇2)让编程改变世界Change the world by programKMP算法之养成篇为了照顾广大喜欢细嚼慢咽的朋友,小甲鱼再添加一讲继续深入探讨思路。这次我们给模式匹配串添加一个k数组(也就是KMP算法中非著名的next数组)。这是一个“智能”的数组,因为他指导着模式匹配串下一步改用第几号元素去进行匹配。No pic you say a
策略和技术
2014年06月06日
KMP算法(养成篇) – 数据结构和算法36
KMP算法(养成篇)让编程改变世界Change the world by programKMP算法相信很多鱼油(包括小甲鱼自己)在刚开始接触KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也。KMP算法对大多数初学者来言是一项比较巨大的考验,特别是自
策略和技术
2014年06月07日
递归和分治思想3|汉诺塔 – 数据结构和算法33
递归和分治思想3:汉诺塔让编程改变世界Change the world by program汉诺塔一位法国数学家曾编写过一个印度的古老传说:在世界中心贝拿勒斯的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移
策略和技术
2014年06月07日
字符串 – 数据结构和算法35
字符串让编程改变世界Change the world by program字符串以前的计算机刚被发明的时候,主要作用是做一些科学和工程的计算工作,科学家发明计算机的时候压根儿不可能想到后人还可以用来看毛片。刚开始的计算机都是处理数值工作,后来引入了字符串的概念,计算机开始可以处理非数值的概念了(当然原理还是用数值来模拟非数值,通过ASCII码表)。鉴于大家对字符
策略和技术
2014年06月07日
栈和队列7 – 数据结构和算法29
栈和队列7让编程改变世界Change the world by program神马是队列这就是队列队列这不是队列队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。与栈相反,队列是一种先进先出(First In First Out, FIFO)的线性表。与栈相同的是,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或
策略和技术
2014年06月07日
栈和队列8 – 数据结构和算法30
栈和队列8让编程改变世界Change the world by program队列的顺序存储结构为什么小甲鱼上节课说队列的实现上我们更愿意用链式存储结构来存储?我们先按照应有的思路来考虑下如何构造队列的顺序存储结构,然后发掘都遇到了什么麻烦。我们假设一个队列有n个元素,则顺序存储的队列需建立一个大于n的存储单元,并把队列的所有元素存储在数组的前n个单元,数组下标
策略和技术
2014年06月07日
栈和队列4 – 数据结构和算法26
栈和队列4让编程改变世界Change the world by program栈的链式存储结构讲完了栈的顺序存储结构,也给大家结合了一些例题演练,相信大家对栈再也不陌生了吧?现在我们来看下栈的链式存储结构,简称栈链。(通常我们用的都是栈的顺序存储结构存储,链式存储我们作为一个知识点,大家知道就好!)栈因为只是栈顶来做插入和删除操作,所以比较好的方法就是将栈顶放在
策略和技术
2014年06月07日
栈和队列3|进制转换 – 数据结构和算法25
栈和队列3:进制转换让编程改变世界Change the world by program从二进制到八进制地球人都知道,我们学习编程常常会接触到不同进制的数,而最多的就是二进制、八进制、十进制、十六进制。鱼C人还知道,二进制是计算机唯一认识的,十进制是人们通常使用的。那么,有没有谁知道八进制和十六进制呢?为什么没有三进制、四进制、五六七进制呢?(⊙v⊙)嗯,我们
策略和技术
2014年06月07日
栈和队列2 – 数据结构和算法24
栈和队列2让编程改变世界Change the world by program疑问解释上节课我们讲解栈的结构,我们是这样声明的:typedef int ElemType;typedef struct{ElemType *base;ElemType *top;int stackSize;}sqStack;有些朋友提出了疑问:怎么没有data元素存放数据?怎么
策略和技术
2014年06月07日
栈和队列 – 数据结构和算法23
栈和队列让编程改变世界Change the world by program栈和队列栈和队列栈的定义栈是一种重要的线性结构,可以这样讲,栈是前面讲过的线性表的一种具体形式。就像我们刚才的例子,栈这种后进先出的数据结构应用是非常广泛的。在生活中,例如我们的浏览器,每点击一次“后退”都是退回到最近的一次浏览网页。例如我们Word,Photoshop等的“撤销”功
策略和技术
2014年06月07日
线性表17 – 数据结构和算法22
线性表17让编程改变世界Change the world by program双向循环链表实践课堂演示题目:要求实现用户输入一个数使得26个字母的排列发生变化,例如用户输入3,输出结果:DEFGHIJKLMNOPQRSTUVWXYZABC同时需要支持负数,例如用户输入-3,输出结果:XYZABCDEFGHIJKLMNOPQRSTUVW小甲鱼带着大家打代码时
策略和技术
2014年06月07日
线性表16:双向链表 – 数据结构和算法21
线性表16 : 双向链表让编程改变世界Change the world by program这货我们地球人把他称为火车,有了它,全世界每年春季最大规模的物种迁移才会发生在中国!双向链表大家都知道,任何事物出现的初期都显得有些不完善。例如我们的火车刚发明的时候是只有一个“头”的,所以如果它走的线路是如下:A->B->C->D->E->F->G->H->I->J->K
策略和技术
2014年06月07日
线性表15|魔术师发牌问题和拉丁方阵 – 数据结构和算法20
线性表15 : 魔术师发牌问题和拉丁方阵让编程改变世界Change the world by program题外话今天小甲鱼看到到微博有朋友在问,这个《数据结构和算法》系列课程有木有JAVA版本的?因为这个问题之前也有一些朋友问过,所以咱在这里统一说下哈。这个你要这么想,我们怀着民族情结看日本AV的时候,我们固然是完全不知道她们在所啥的,这点你要承认,但是我们对
策略和技术
2014年06月07日
线性表13|约瑟夫问题 – 数据结构和算法18
线性表13:约瑟夫问题让编程改变世界Change the world by program约瑟夫问题据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀
策略和技术
2014年06月07日
线性表11|单链表小结:腾讯面试题 – 数据结构和算法16
线性表11|单链表小结:腾讯面试题让编程改变世界Change the world by program静态链表的删除操作我们的故事还没结束,小C看到小A和2B这样非法的勾当,内心觉得很不爽,一句话也不说就离开了队伍。。。。。。我们先在图上实践一下,然后研究代码:静态链表的删除操作代码:ListDelete.c静态链表优缺点总结优点:在插入和删除操作时,只需
策略和技术
2014年06月07日
线性表9 – 数据结构和算法14
线性表9让编程改变世界Change the world by program静态链表这一节课,我们试图通过静态链表的讲解来瞻仰古人的伟大!(似乎人总要挂了之后才能变得伟大~_~)神马是静态链表呢?又跟古人能有半毛钱关系?地球人都知道C语言是个伟大的语言,他的魅力在于指针的灵活性,使得它可以非常容易地操作内存中的地址和数据,这比其他高级语言更加灵活方便。(面向对象
策略和技术
2014年06月07日
线性表8 – 数据结构和算法13
线性表8让编程改变世界Change the world by program单链表的整表删除当我们不打算使用这个单链表时,我们需要把它销毁(真狠,不要就给别人嘛,还销毁~)。其实也就是在内存中将它释放掉,以便于留出空间给其他程序或软件使用。单链表整表删除的算法思路如下:声明结点p和q;将第一个结点赋值给p,下一结点赋值给q;循环执行释放p和将q赋值给p的操
策略和技术
2014年06月07日
线性表10 – 数据结构和算法15
线性表10让编程改变世界Change the world by program静态链表的插入操作上节课我们说到,为了辨明数组中哪些分量未被使用,解决的方法是将所有未被使用过的及已被删除的分量用游标链成一个备用的链表。每当进行插入时,便可以从备用链表上取得第一个结点作为待插入的新结点。可能这样说大家都还是难以理解吧?我们结合图片来讲解,这里我们假设要在A后边插入
策略和技术
2014年06月07日
线性表6 – 数据结构和算法11
线性表6让编程改变世界Change the world by program单链表的插入我们先来看下单链表的插入。假设存储元素e的结点为s,要实现结点p、p->next和s之间逻辑关系的变化,大家参考下图思考一下:单链表的插入我们思考后发觉根本用不着惊动其他结点,只需要让s->next和p->next的指针做一点改变。s->next = p->next;p->
策略和技术
2014年06月07日
线性表7 – 数据结构和算法12
线性表7让编程改变世界Change the world by program单链表的整表创建对于顺序存储结构的线性表的整表创建,我们可以用数组的初始化来直观理解。而单链表和顺序存储结构就不一样了,它不像顺序存储结构数据这么集中,它的数据可以是分散在内存各个角落的,他的增长也是动态的。对于每个链表来说,它所占用空间的大小和位置是不需要预先分配划定的,可以根据系统的
策略和技术
2014年06月07日
