对于计算机相关专业的学生来说,我们学习了很多的专业课程,像编程语言、算法、数据结构、编译原理、软件工程等。很多学生都会有这样的疑问:我学了这么多的课程有什么用呢?在工作中有多少会真正被应用到呢?也就是说,大家都觉得理论和实践之间有着不可逾越的鸿沟。邹欣老师的《构建之法:现代软件工程》一书很好地,并且巧妙地将理论和实践结合了起来。 继《移山之道》、《编程之美》之后,邹欣老师再推新作《构建之法:...
分类:
其他好文 时间:
2014-10-06 16:42:50
阅读次数:
178
问题描述:
如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。
写一个程序,求一棵二叉树中相距最远的两个节点之间的距离。测试用的树:
n1
/ ...
分类:
其他好文 时间:
2014-10-04 11:05:26
阅读次数:
372
码完第一次编译运行居然就成功了。。。高兴~
问题描述:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。例如:
10
/ 6 14
/ \ / 4 8 12 16
转换成双向链表
4=6=8=10=12=14=16
算法:...
分类:
其他好文 时间:
2014-10-03 22:40:25
阅读次数:
183
首先明白两个概念:
1. 深度遍历包括前中后序遍历三种;
2. 广度优先遍历就是层次遍历。
PS:
前中后序遍历,如果使用递归遍历,都很简单易理解;
如果使用非递归方式,首先想到的就应该是使用栈结构来控制整个过程,因为递归也是利用栈来实现的;
前中后序遍历的非递归方式中,后序遍历的非递归方式相比较而言,略复杂。...
分类:
其他好文 时间:
2014-10-02 12:39:03
阅读次数:
301
这个题目是,给定一个整数 N,需要寻找另外一个整数 M,使得 N * M 得到的结果十进制表示中只存在1和0两个数字。首先看到这个题目,第一思想肯定是 使 M = 1,并依此递增 M 的值,直到 N * M 获得想要的效果,但是,如果 N 很大呢,那么计算量也是很大的,所以,我们需要寻求更好的解决办法。 书中提到的解决办法有点复杂,这里我介绍的方法也是非常简单的,就是倒过来思考问题,我们...
分类:
其他好文 时间:
2014-09-28 17:26:13
阅读次数:
164
同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数...
分类:
其他好文 时间:
2014-09-26 02:03:58
阅读次数:
267
这道题的意思是,给定一个数n,那么从1到n这n个数中,1出现了几次。这个问题开始看,肯定不容易做,往往都是利用最笨的方法,一个数一个数的找就行了,那么如果n很大,就需要非常多的时间了,书中提供了更好的方法,需要发现数字中存在的相关规律:对于数abcde,c这位出现1的次数分以下情况:1.若c > 1,结论是(ab + 1)* 100; 2.若c == 1,结论是(ab)* 100...
分类:
其他好文 时间:
2014-09-25 19:18:47
阅读次数:
129
瑞士计算机科学家Niklaus Wirth于1976年出版的一本书的书名叫做“程序设计 = 算法 + 数据结构”,这句经典名言就体现了数据结构的重要性。数据结构,以及让我们十分头疼的算法并不是一门教你编程的课,它们可以脱离任何的计算机程序设计语言,而只需要从抽象意义上去概括描述。
打一个很形象的比喻:程序设计就像盖房子,数据结构是砖、瓦,而算法则是设计图纸。你若想盖房子首先必须要有原材料(数据结构),但这些原材料并不能自动地盖起你想要的房子,你必须按照设计图纸(算法)一砖一瓦地去砌,这样你才能拥...
分类:
其他好文 时间:
2014-09-22 17:36:32
阅读次数:
237
第一部分:跳跃表
本文将总结一种数据结构:跳跃表。前半部分跳跃表性质和操作的介绍直接摘自《让算法的效率跳起来--浅谈“跳跃表”的相关操作及其应用》上海市华东师范大学第二附属中学 魏冉。之后将附上跳跃表的源代码,以及本人对其的了解。难免有错误之处,希望指正,共同进步。谢谢。
跳跃表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找、插入、删除等操作时的期望...
分类:
其他好文 时间:
2014-09-14 23:46:08
阅读次数:
1323