用栈实现递归与非递归的转换

递归与非递归转换的基础知识是能够正确理解三种树的遍历方法:前序,中序和后序,第一篇就是关于这三种遍历方法的递归和非递归算法。 一、为什么要学习递归与非递归的转换的实现方法? 1)并不是每一门语言都支持递归的。 2)有助于理解递归的本质。 3)有助于理解栈,树等数据结构。 二、三种遍历树的递归和非递归算法 递 归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来。需要说明的是,这个”原理”并没有经过严格的数学证明,只是我的一个猜 想,不过在至少在我遇到的例子中是适用的。学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序。理解这三种遍历方式...
C | 2009-04-15 14:50 | 阅读 3243 次 | 评论 0 条

Printf的部分实现

[quote][code]#include <stdio.h>int main(){ printf("%hhh"); return 0;}[/code]就是上面的代码,在VC++与C-FREE上运行没有结果显示,而在TURBOC上显示的结果则为%hhh请问下这是为什么?哪个结果才是正确的呢?[/quote] 这个问题的原因是因为几种编译器对printf函数的实现不同,下面我对这两种情况分别进行了实现 1.DEV_C++,VC++ 6.0,VS200X.....[code]#include <stdio.h> #include <stdlib.h> #include...
原创 | 2009-04-12 11:35 | 阅读 2972 次 | 评论 1 条

Date类

今天写了一个日期类,发上来共享一下 //头文件:(date.h)class Date{public:Date();Date(int y,int m,int d);Date(const Date&amp; dt);Date&amp; add_year(int n);Date&amp; add_month(int n);Date&amp; add_day(int n);bool leapyear(int n);Date operator+(int n);Date operator-(int n);Date&amp; operator++();Date&amp; operator--()...
原创 | 2009-04-12 11:34 | 阅读 2214 次 | 评论 0 条

设计将数组A[1][n]中所有奇数移到偶数之前的算法

设计将数组A[1][n]中所有奇数移到偶数之前的算法,不另外增加存储空间,时间复杂度为o(n) /******************************************************** 算法: 从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止 **************************************************************/ #include <stdio.h> #define ...
原创 | 2009-04-12 11:33 | 阅读 4615 次 | 评论 0 条

输出一个整型数据的二进制形式(高效)

一般人会考虑用位运算,程序代码如下: #include<stdio.h> void Print(int n){if(n==1||n==0){ printf("%d",n); return;}Print(n>>1);printf("%d",n%2);} int main(){int a;scanf("%d",&amp;a);Print(a);return 0;} 我们现在用一种特别的方法.用位段,可以不用进行运算即可输出结果,首先我们用一个程序输出整型数据在内存中的形式,程序代码如下: #include <stdio.h>#include <stdlib.h>type...
原创 | 2009-04-12 11:30 | 阅读 3672 次 | 评论 0 条

控制多个光驱的打开关闭

void ctrl_cdrom_door( LPCTSTR drivename ,//光驱的盘符,如f:等. bool fOpen//弹出时用true,弹入时用false ) { TCHAR devstr[128],ctrlstr[128]; wsprintf(devstr,_T("open %s type cdaudio alias mycd wait"),drivename); wsprintf(ctrlstr,_T("set mycd door %s wait"),fOpen?_T("open"):_T("closed")); mciSendString(devstr,NULL...
原创 | 2009-04-12 11:29 | 阅读 2563 次 | 评论 0 条

求高次幂算法(高效)

#include<stdio.h> #include<math.h>#define N 62 //指定的指数int main(){ int i,x,exp=1,time=0;//exp记录指数,time用来统计乘法计算次数 scanf("%d",&amp;x); long double a,s=(long double)x; while(exp!=N) //指数等于指定的指数结束循环 { a=x; for(i=1;exp<N;i*=2)//指数小于指定的时候,继续以平方的形式递乘 { ...
原创 | 2009-04-12 11:28 | 阅读 4828 次 | 评论 5 条

汉明重量的延伸

当然对于TheBeet来说,数1个数字的二进制形式太没有挑战性了。最近TheBeet想到了一个问题来挑战自己——数出一个从0, 1, 2, .. , n的序列中数字2进制表示后1的个数。TheBeet想了很久也没想出来,于是他找到了您来帮忙。 Input 输入包含多个测试数据。 每个测试数据为一行,每行包括一个非负十进制整数n(n < 2^63)。 输入数据以-1结束。 Output 对于每个测试点,先输出"Case #:",#代表第几个测试点,然后在下一行输出对应数列二进制表示后1的个数。 Sample Input Sample Output Case ...
原创 | 2009-04-12 11:26 | 阅读 2335 次 | 评论 0 条

VB程序设计小技巧(1)

1.让你的程序只运行一次 你自己编写的程序是否可以运行多个,你是否看见有些程序运行多个时会提示程序已正在运行,下面就让我们来实现这个功能,其实非常简单,只要用APP的一个方法就可以了,在程序加载时,调用一下APP的PrevInstance方法就可以检测程序是否正在运行,程序好下 建立一个窗体,在代码中输入如下代码即可: Option Explicit Private Sub Form_Load()If App.PrevInstance Then MsgBox "The programe is running now,you shouldn't run the progr...
原创 | 2009-04-12 11:25 | 阅读 2814 次 | 评论 0 条

VB程序设计小技巧(2)

5.设置窗体透明度,并实现窗体渐入淡出 设置窗体透明度要用到三个API函数SetWindowLong,SetLayeredWindowAttributes和GetWindowLong,建立一个模块,输入代码如下: Option ExplicitPrivate Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetLayeredWindowA...
原创 | 2009-04-12 11:23 | 阅读 2705 次 | 评论 0 条
浏览195339次