递归与非递归转换的基础知识是能够正确理解三种树的遍历方法:前序,中序和后序,第一篇就是关于这三种遍历方法的递归和非递归算法。
一、为什么要学习递归与非递归的转换的实现方法?
1)并不是每一门语言都支持递归的。
2)有助于理解递归的本质。
3)有助于理解栈,树等数据结构。
二、三种遍历树的递归和非递归算法
递 归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来。需要说明的是,这个”原理”并没有经过严格的数学证明,只是我的一个猜 想,不过在至少在我遇到的例子中是适用的。学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序。理解这三种遍历方式...
[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...
今天写了一个日期类,发上来共享一下
//头文件:(date.h)class Date{public:Date();Date(int y,int m,int d);Date(const Date& dt);Date& add_year(int n);Date& add_month(int n);Date& add_day(int n);bool leapyear(int n);Date operator+(int n);Date operator-(int n);Date& operator++();Date& operator--()...
设计将数组A[1][n]中所有奇数移到偶数之前的算法,不另外增加存储空间,时间复杂度为o(n)
/********************************************************
算法:
从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止
**************************************************************/
#include <stdio.h>
#define ...
一般人会考虑用位运算,程序代码如下:
#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",&a);Print(a);return 0;}
我们现在用一种特别的方法.用位段,可以不用进行运算即可输出结果,首先我们用一个程序输出整型数据在内存中的形式,程序代码如下:
#include <stdio.h>#include <stdlib.h>type...
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...
#include<stdio.h> #include<math.h>#define N 62 //指定的指数int main(){ int i,x,exp=1,time=0;//exp记录指数,time用来统计乘法计算次数 scanf("%d",&x); long double a,s=(long double)x; while(exp!=N) //指数等于指定的指数结束循环 { a=x; for(i=1;exp<N;i*=2)//指数小于指定的时候,继续以平方的形式递乘 { ...
当然对于TheBeet来说,数1个数字的二进制形式太没有挑战性了。最近TheBeet想到了一个问题来挑战自己——数出一个从0, 1, 2, .. , n的序列中数字2进制表示后1的个数。TheBeet想了很久也没想出来,于是他找到了您来帮忙。
Input
输入包含多个测试数据。 每个测试数据为一行,每行包括一个非负十进制整数n(n < 2^63)。 输入数据以-1结束。
Output
对于每个测试点,先输出"Case #:",#代表第几个测试点,然后在下一行输出对应数列二进制表示后1的个数。
Sample Input
Sample Output
Case ...
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...
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...