鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c语言 > >

一个小程序的经验总结

来源:互联网 作者:佚名 时间:2012-11-19 17:11
#0 本程序递归生成树,树在分叉时可能二叉,也可能三叉...,但不超过16叉,所以果断用了数组。 最终完成大概600行,最初估计大半天完成,最终花了三天。 最大感受:一旦数据定型,程序基本结构也定型了 | 自顶向下,化解复杂度控制很有效. #1 数据类型应用 t

#0 本程序递归生成树,树在分叉时可能二叉,也可能三叉...,但不超过16叉,所以果断用了数组。
最终完成大概600行,网站空间,最初估计大半天完成,最终花了三天。
最大感受:一旦数据定型,程序基本结构也定型了 | 自顶向下,化解复杂度控制很有效.
#1 数据类型应用 typedef 实现灵活性

1 typedef int normalInt;
2 typedef char Element; 


#2 运用常量实现一定程度的可配置性

1 const normalInt ElementNumber = 32;
2 const normalInt indexCount = 32;
3 const normalInt resultIdxCount = 4096;
4 const normalInt MAX_target = 32;
5 const normalInt MAX_Pool_Size = 4096;
6 const normalInt indexOver = -1;
7 
8 const Element dataTableOver = -1;


#3 对于重新整理数组数据 eg. { 1 3 -2 -2 3 -2 -2 -2 4 5 -2 -1 } 剔除负数->{ 1 3 3 4 5 }
用了容易编码的方式(申请同尺寸数组然后来回交换),有时间的话应该尝试下in place processing的方法。
同样非递归方式画出树我也使用了同样的伎俩,以后换个方式做。
即便这段代码也可以通过传递参数,根据参数动态申请存储器来加以改善.

    normalInt idx[indexCount];//indexOver
    normalInt len=1;
    for (normalInt m=1; index[m]!=indexOver; m++)//m<=index[0]
        if (index[m] > -1){
            idx[len] = index[m];
            len++;
        }

    for (normalInt m=1; m<len; m++) index[m] = idx[m];
    index[len] = indexOver;

 

#4 牢记:C只有一种参数传递方式,下面代码演示了怎么通过函数调用申请资源、释放资源的过程

 1 int allocResourse( int ** p ){
 2     *p = (int*)malloc( 4*sizeof(int) );
 3 
 4     return 0;
 5 }
 6 
 7 int deallocResource(int **p){
 8     free(*p);
 9 
10     return 0;
11 }
12 
13 int printArrayElements(){
14     int * p = NULL;
15 
16     allocResourse(&p);
, p[m]);
18     deallocResource(&p);
19     
20     getchar();
21 
22     return 0;
23 }


#5 使用指针应谨慎,写了下面这个函数我明白了间址指针的用途

 1 int destroyTree(Tree ** tree){
 2     if (*tree == NULL) return 0;
 3 
 4     for(normalInt m=1; m<=(*tree)->pointerCounter; m++) 
 5         destroyTree(&((*tree)->p[m]));
 6     
 7     free(*tree);
 8     *tree = NULL;
 9 
10     return 0;
11 }

#6 使用assert

网友评论
<