2012年8月16日

摘要: 队列的操作主要有:入队,出队,返回队列长度,返回队首元素,判断队列是否为空。 若用两个栈来实现,可以另其中一个栈inStack专门处理入队工作,另一个栈outStack专门处理出队工作。对于入队而言,可以直接把元素加入到inStack中,复杂度为O(1);而对于出队需要做些处理,因为队列是先入先出的,而栈是先入后出,所以输出应该反序。比如inStack接收到的元素顺序为1, 2, 3,栈顶元素是3,但出队希望让1先出。解决方法是把inStack里的元素放到outStack中,这样outStack接收到的元素顺序就是3, 2, 1了,栈顶元素就是我们想要的1,时间复杂度为O(N)。更具体地,入. 阅读全文
posted @ 2012-08-16 16:33 Trony 阅读(1510) 评论(0) 推荐(0) 编辑

2012年8月9日

摘要: 读代码的时候看到这样一段$template_content = str_replace(”/xEF/xBB/xBF”, ”, $template_content);不知道是何作用,经过一番查找资料,终于解开了这个疑问资料如下:在window下面用记事本编辑文件的时候,如果保存为UNICODE或UTF-8,分别会在文件的开头加上两个字节“/xFF/xFE”和三个字节“/xEF/xBB/xBF”。在读取的时候就可能会遇到问题,但是不同的环境对这几个多于字符的处理也不一样。(其他的文本编辑工具也存在这个问题,但是可以选择去除bom,如editplus的设置:参数选择->文件->utf-8 阅读全文
posted @ 2012-08-09 16:05 Trony 阅读(1369) 评论(0) 推荐(0) 编辑

2012年8月8日

摘要: 1 mylist *listReverse(mylist *head) 2 { 3 mylist *p=head; 4 mylist *pfront=NULL,*pNext; 5 while(p!=NULL) 6 { 7 pNext=p->next; 8 p->next=pfront; 9 pfront=p;10 p=pNext;11 }12 return pfront;13 } 阅读全文
posted @ 2012-08-08 16:06 Trony 阅读(239) 评论(0) 推荐(0) 编辑
 
摘要: 1.判断单链表是否存在环的方法为:设置两个指针(fast, slow),初始值都指向链表的头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针最后必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下: 1 typedef struct linkList{ 2 int data; 3 linkList *next; 4 }mylist; 5 6 bool IsHasRound(mylist *head) 7 { 8 mylist *p1,*p2; 9 p1=p2=head;10 ... 阅读全文
posted @ 2012-08-08 13:57 Trony 阅读(296) 评论(0) 推荐(0) 编辑

2012年8月6日

摘要: 方法一:快慢指针法,和找链表倒数第K个节点有点类似。同样适用两个文件指针,fp,fs,把快的文件指针先读N行后,快慢文件指针同时一行一行的开始读取,直到快的文件指针读到文件最后,则慢的文件指针此时读到文件的倒数第N行,就可以开始数数慢的文件指针的内容直到读取文件结束。代码实现如下: 1 void PrintfFileN(string filename,int n){ 2 File* fp,*fs; 3 int i; 4 char fpline[MAXLINE]; 5 char fsline[MAXLINE]; 6 if((fp = f... 阅读全文
posted @ 2012-08-06 19:56 Trony 阅读(913) 评论(0) 推荐(0) 编辑
 
摘要: Q:判断整数序列是不是二元查找树的后序遍历结果 思路:(1)首先把给出的序列从小到大排列,这相当于是一个中序遍历的结果(2)有中序遍历和后续遍历重构二叉树(3)判断二叉树是否是二元查找树二元查找树: 它首先要是一棵二元树,在这基础上它或者是一棵空树;或者是具有下列性质的二元树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二元查找树Q:翻转句子中单词的顺序题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处 阅读全文
posted @ 2012-08-06 17:00 Trony 阅读(145) 评论(0) 推荐(0) 编辑

2012年8月3日

摘要: 思路:对矩阵中任何一个节点O,找到其所有的邻近节点A,B..并相加得到和sum,用sum-节点A的值,得到一个新值O1。再找所有和AB..邻近的(已经出现的不再加)之和,减去O1,又得到一个新值O2,重复该过程,直到O值等于0或小于0。若小于0,则不可能。若所有的节点经过该运算等于0则可以。构造的过程如下:找到矩阵中最小的元素,找到相邻最小的同时减去最小值,重复该过程,就可以减到0。例如: 矩阵 1 2 3 4 首先对于第一行第一列元素1,,它的相邻元素和为2+3=5,将5-1得到4;元素2和3的相邻元素为4(1已出现),而4-4=0,元素1满... 阅读全文
posted @ 2012-08-03 11:08 Trony 阅读(895) 评论(0) 推荐(0) 编辑
 
摘要: Q:一个射击运动员打靶,靶一共有10环,连开10 枪打中90环的可能性有多少?分析:可通过递归算法来进行求解,运动员在射击的过程中,每次射击有11种可能:命中1环到10环之间的环数,或者脱靶。只要最后一靶只差10环以内,则此次射击有效,进行输出。代码实现如下: 1 //函数功能 : 求解number次打中sum环的种数 2 //函数参数 : number为打靶次数,sum为需要命中的环数,result用来保存中间结果,total记录种数 3 //返回值 : 无 4 void ShootProblem_Solution(int number, int sum, vector<int> 阅读全文
posted @ 2012-08-03 10:30 Trony 阅读(938) 评论(0) 推荐(0) 编辑
 
摘要: 问题:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。思路:同样是用递归求解。可以考虑求长度为n的字符串中m个字符的组合,设为C(n,m)。原问题的解即为C(n, 1), C(n, 2),...C(n, n)的总和。对于求C(n, m),从第一个字符开始扫描,每个字符有两种情况,要么被选中,要么不被选中,如果被选中,递归求解C(n-1, m-1)。如果未被选中,递归求解C(n-1, m)。不管哪种方式,n的值都会减少,递归的终止条件n=0或m=0。 代码实现如下: 1 //函数功能 : 从一个字符串中选m个元素 2 //. 阅读全文
posted @ 2012-08-03 10:18 Trony 阅读(369) 评论(0) 推荐(0) 编辑
 
摘要: 问题1 :输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 分析:可通过递归求解。递归算法的四个特性:(1)必须有可达到的终止条件,否则程序将陷入死循环;(2)子问题在规模上比原问题小;(3)子问题可通过再次递归调用求解;(4)子问题的解应能组合成整个问题的解。下面这个图很清楚的给出了递归的过程: 代码实现如下: 1 //函数功能 : 求一个字符串某个区间内字符的全排列 2 //函数参数 : pStr为字符串,begin和end表示区间 3 //返回值 : ... 阅读全文
posted @ 2012-08-03 10:12 Trony 阅读(1431) 评论(0) 推荐(0) 编辑