【精】图编程总结(编程过程的总结)

编程过程思维状态

  编程是一个需要注意力高度集中的过程,不仅是编码的过程,而且构建算法与数据结构的过程也必须如此。因为整个过程可能有很多状态,稍微不注意就会忽略或陷入混乱。人是高度进化的动物,能够处理很多出乎意料之外的事情,但是计算机却没有办法,如果出现之前未考虑的情况,计算机最可能的反应就是出错与崩溃。

  然而就算注意力完全集中,一个人大脑中的缓存也是有限的,不可能同时保持着那么多状态与变量的状态,但人脑不会内存溢出,取而代之的是混乱。我们要清晰编程,而不要混乱编程因此就必须应用从上至下,逐步求精的过程,先从问题的性质与规律入手,然后进行算法与数据结构的构想,等这一切都无懈可击之后在开始写代码,编码中写好注释,真正的编码时间不应该超过整个过程的百分之三十。尽量在纸张上写出相关的状态与过程,以便于之后的参照。

  进一步具体的说一下编程的过程

  1问题探索过程,观察思考问题的性质,找到问题及其对象中存在的规律,从而找到一种人能够实现的有周期性的解法。

  2算法的求精与数据结构、模块、接口的设计:将抽象性较高的周期性解法转化为计算机能够执行的算法,将程序框架以及具体实现都设计好,最后的代码就是这个过程结果的充实。

  3根据伪代码编码,在写每个块状结构之前都必须注释上这个块状结构的功能与实现。

  4debug与测试

 

debug

 

 

    debug是非常重要的,我总结的常用办法有个:

  1错误代码段定位,缩小搜索范围是节省时间的重要方法。

  2抓住一些关键的量(状态指示量),将代码的运行状态显示出来。不要让代码成为脱缰的野马,在写代码的时候,每一个结构块之前都要注释这一个结构块的功能实现,在debug的时候,用运行状态变量来保证代码的运行情况在掌握之中。

  3、利用大量的多种类型的可能输入进行测试(对于初步运行正常的程序)

  虽然debug技非常关键,但是一次性命中仍然是努力的目标,每次写代码都必须努力减少bug出现的几率,一个好的方法是分块分段来写程序,对块段的测试bug的出现,也可以减少debug上的时间。

 

debugee1:当vertex[n]被声明但n还没定义的时候,DEV并不报错,但运行的时候却有时会出现诡异的错误,也就是vertex的地址发生改变,访问vertex内的元素时出现崩溃。这个bug虽然是被编译器放过而变得很隐蔽,但是仍然不应该困扰那么长时间,因为当系统中某一个环节问题的时候,你必须考虑它所有的元素是否都正常,如果能看到的元素是正常的,就必须考虑那些隐藏的元素一个变量出现诡异的变化,不仅要看它被调用、修改的过程,也要注意到它的声明与定义的过程

 

debugee2:二维数组的传递需要列的信息,为了克服这一问题,用一个指针数组来存储这个各行的头指针。

 

debugee3:算法与数码实现的代沟,或者说是伪代码与代码之间的代沟,当你用抽象语言来期望完成某个功能的时候,用代码写出来却会出现言不达意的错误。就像这里,原来把if中语句放在for语句的中间期望完成同样的功能,但实际上会出现bug这类问题的解决方法在于编程过程的把握。

 

debugee4debugee5算法本身的漏洞,没有把问题考虑周全,可能将同一个未访问的顶点多次放入栈中。debugee5中指针指来指去比较复杂,容易出错。这类问题的解决方法在于编程过程的把握。

 

debugee6:对于向量的应用不是很熟悉,对于迭代子也不了解,很多功能函数是基于向量迭代子的,所以,很多时候用迭代子比较好。但是如果直接用计数变量也可以,因为可以用再一次计数方法来得到相应位置的迭代子。

 

debugee7:对于指针的new的理解模糊,实际情况是new一个空间,把给定的指针的值改为new空间的首地址。因此,a=ba=new int这样的行为会使a的值改变,但是不会使b的值改变,这是很明显的。这是指针与普通变量的相似点。

 

 

 

 

附上代码,代码在DEV下编译通过。(代码有点乱,因为同时用了邻接表与邻接矩阵两种方式来锻炼下。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值