文章分类 -  C++/C技术

摘要:在《单链表操作——交换节点》的代码中,有一个Bug,就是当交换的是链表中相邻的两个节点的时候,程序会Down,原因是在交换节点操作中指针的修改引起的(只需要手工运行下程序就十分清楚了)。因此需要作一点修补,就是判断两个节点是否是相邻节点,再单独处理即可。 阅读全文

posted @ 2005-08-11 22:00 k_eckel's mindview 阅读(1010) 评论(1) 推荐(0)

摘要:单链表的交换节点的含义是:给定一个单链表,要求交换其中的任意两个节点。注意这里链表的头节点是不参与节点交换的。这个看上去是比较简单,但是实现起来却还是需要一定的基本功。 阅读全文

posted @ 2005-08-11 21:58 k_eckel's mindview 阅读(3888) 评论(1) 推荐(0)

摘要:子串匹配当然也可以使用不回溯的方式实现,这个算法是笔者在作一个模糊查询的实现的时候想到的,没有确认和通常算法的异同,可能是一个很平常的思想:)。实现的思想很简单:每次比较子串长度的大字符串,若相等则返回,否则在大字符串中的起始位置递进,直到大字符串结束。 阅读全文

posted @ 2005-08-11 11:03 k_eckel's mindview 阅读(1068) 评论(0) 推荐(0)

摘要:回溯法求解子串的过程为:依次遍历大字符串和子串,当发现不相等的时候就回溯到上次起始字符的下一个字符继续,并给子串起始位置清零。当遍历完整个大字符串(没有找到)或者遍历完子串(找到)则算法退出。 阅读全文

posted @ 2005-08-11 09:37 k_eckel's mindview 阅读(1611) 评论(0) 推荐(0)

摘要:网上看到一个面试题(据说是ATC的):写一个在一百万数字中求最大的10个数字的算法。这个问题的解决方案很多,显然考察的是算法的效率(因为基数一百万)。至少有以下几种解法:1)冒泡10次;2)用一个10个大小的数组保存最初10个元素,然后遍历,遇到比最小的大的元素就插入这个数组中,并去掉最小的元素。显然这两种解法的效率都不是特别合适。基于堆的算法应该是提供了一个较好的解决方案,构建大顶堆,取得第一个元素,然后循环10次即可达到题目要求。当然,直接使用基于堆的优先队列可以达到同样的目的。 阅读全文

posted @ 2005-08-10 20:25 k_eckel's mindview 阅读(3509) 评论(0) 推荐(0)

摘要:k_eckel:http://www.mscenter.edu.cn/blog/k_eckel & http://k-eckel.cnblogs.com 二分查找是提升系统的有效技术之一,特别是处理大规模的数据检索或者查询的时候,二分查找就更加表现出非凡的算法效率。并且二分查找的思想更加是值得我们好好体会和融会贯通的: //查找 二分查找 template int BinSearch(... 阅读全文

posted @ 2005-08-08 15:50 k_eckel's mindview 阅读(833) 评论(2) 推荐(0)

摘要:实际上你可以在VC IDE中设置命令行参数,方法为:Project->Settings->Debug->General:Program Arguments中输入参数即可。 阅读全文

posted @ 2005-08-07 10:12 k_eckel's mindview 阅读(565) 评论(0) 推荐(0)

摘要:Singleton模式可能可以说是最简单的设计模式了,其应用的场景和示例实在是没有太多可以再重复,但是以下的两个问题还是需要我们进一步的审视: 阅读全文

posted @ 2005-08-06 16:00 k_eckel's mindview 阅读(1832) 评论(0) 推荐(0)

摘要:k_eckel:http://www.mscenter.edu.cn/blog/k_eckel & http://k-eckel.cnblogs.com 二叉树是很有用的一种数据结构,遍历则是其基本操作,这里列出实是保证完整性。二叉树后序遍历的非递归遍历中当当前节点存在右子树的时候需要先遍历右子树,因此要对二叉树的节点定义中添加_tag域,标志当前节点右子树是否已经遍历,备用的结构定... 阅读全文

posted @ 2005-08-05 00:24 k_eckel's mindview 阅读(6891) 评论(0) 推荐(0)

摘要:k_eckel:http://www.mscenter.edu.cn/blog/k_eckel & http://k-eckel.cnblogs.com 二叉树是很有用的一种数据结构,遍历则是其基本操作,这里列出实是保证完整性。几个备用的结构定义和函数: //二叉树节点定义 class TreeNodeElement { public: ... 阅读全文

posted @ 2005-08-04 22:58 k_eckel's mindview 阅读(5251) 评论(0) 推荐(0)

摘要:算法基于这样一种思想:将待移动的字符串从移动点分为a、b两个子串,逆转a,再逆转b,再逆转得到的整个字符串。即:(a’b’)’ = ba。 阅读全文

posted @ 2005-08-04 13:30 k_eckel's mindview 阅读(836) 评论(3) 推荐(0)

摘要:在《GoF 23种设计模式模式解析附C++实现源码》和《设计模式解析之—Visitor模式》中,我给出了Visitor模式的诠释和示例实现源码。个人觉得例子和解析还是能够比较清晰地为学习和掌握Visitor模式提供一些信息,但是对于其中的一个重要知识没有很好地解释,这就是multi-dispatch(多分派),multi-dispatch(多分派)是Visitor模式的关键,实际上Visitor模式就是提供了一种multi-dispatch(多分派)中的double dispatch(双分派)的实现方式。 阅读全文

posted @ 2005-08-02 14:48 k_eckel's mindview 阅读(2429) 评论(0) 推荐(0)

摘要:在《GoF 23种设计模式模式解析附C++实现源码》中,我已经给出了对于State模式的简化诠释并给出了一个C++实现的例子。再次审视以前的代码,发现有些地方还是有些生涩,并且感觉示例代码没有能够很好地诠释要表达的意思。最近因为项目中用到了一些State模式相关的知识,对State模式进行了一个重新的审视,并附上用C++实现的例子,供学习交流。 阅读全文

posted @ 2005-07-31 12:43 k_eckel's mindview 阅读(1529) 评论(1) 推荐(0)

摘要:二叉树前序遍历的递归和非递归实现 阅读全文

posted @ 2005-07-30 16:31 k_eckel's mindview 阅读(3277) 评论(1) 推荐(0)

摘要:这也是网络流传的Microsoft的面试题目之一:“怎样从顶部开始逐层打印二叉树结点数据?请编程”。这个题目实际上很简单,采用队列的方式很容易可以实现: 阅读全文

posted @ 2005-07-22 13:28 k_eckel's mindview 阅读(6667) 评论(10) 推荐(0)

摘要:给定一个字符串,要求给出其所有的排列。例如给出“ABC”,则其排列有:ABC,ACB,BAC,BCA,CAB,CBA 6种。这是一个看似简单,但是实现起来却不是很容易的问题。记得去年一个师姐去参加某NB公司的笔试的时候就被这样一个问题给整了,更加郁闷的是别人是把程序都给出了,给出了输入,要给出输出。结果是倒弄了半天,最后发现是求解全排列,郁闷不已! 阅读全文

posted @ 2005-07-21 11:00 k_eckel's mindview 阅读(1591) 评论(5) 推荐(0)

摘要:没有人会怀疑实现交换两个整数(或者字符等)的程序是很简单的,但是很多人也会被这样的一个问题郁闷:不用任何中间变量,实现两个整数的交换。在《微软面试题——反转字符串》中列出了比较常见的做法,但是这种Hack技巧却带来了后遗症。 阅读全文

posted @ 2005-07-21 10:36 k_eckel's mindview 阅读(644) 评论(6) 推荐(0)

摘要:前几天和一位老师聊天,老师是一位很实干的老师,刚从英国回来。说到去给一个公司招聘面试时候,对着10几个计算机专业的研究生让写一个求最大公约数的欧几里德算法,连思想都给出了,竟然…..。我无语,想想自己在很多时候也对基础的简单的经典的算法有些忽略了,心有余悸。 欧几里德算法也就是辗转相除法,有着2000年的历史了。欧几里德算法依据的算法理论是一个定理:gcd(a,b) = gcd(b,a mod b)。 阅读全文

posted @ 2005-07-20 10:01 k_eckel's mindview 阅读(8999) 评论(5) 推荐(1)

摘要:网络流传的Microsoft的面试题目之一:“编写反转字符串的程序,要求优化速度、优化空间”。因为最近一直很多关注算法方面的实践和研究,因此对这个问题进行了一些思考,给出了5种实现方法(有两种解法相关性比较大)。 阅读全文

posted @ 2005-07-19 15:53 k_eckel's mindview 阅读(13258) 评论(0) 推荐(1)

摘要:单链表的逆转过程的关键是3个指针:一个记录当前逆转节点的前一个节点,一个记录当前逆转节点的下一个节点,另外一个则记录当前的逆转节点。 阅读全文

posted @ 2005-07-19 09:49 k_eckel's mindview 阅读(2734) 评论(1) 推荐(0)