我关于数据结构与算法的想法–第一弹
写代码之前的规划
- 核心算法?数据存储结构?输入输出?
思考:还有更好的方法吗? - 程序结构安排和类的设计(.h .cpp)?
- 算法的实现— 函数封装(功能、输入输出)写伪代码
- 1 一个函数干一件事
- 2 功能易于维护
- 3 函数调用关系
- 非常规情况处理,如除零错误、链表已空等
写代码的经验
- 命名规则,如MAX_SIZE全部大写的表示全局变量
- 注释(程序说明,函数功能,变量解释)
- 函数及变量是否 const friend & *
- 不要等到完全写完再编译,早发现问题,早改正
- 不要怕bug。越怕,越容易bug
- 如果不会调试,在关键步骤输出关键变量的值(输出调试法)
- 遇到没见过的报错,上网查
具体编程的时候需要注意
- 特殊情况:输入为空,数组已经达到最大长度 等
- 循环体容易出错的地方:第一步,中间步骤,最后一步
- 代码易于维护,要让其他人看得懂
- 进一步:思考是不是有更高效的写法
写代码之前的规划:以“大整数除法”为例
- 问题重述:A÷B=C…D,输入[A, B] 输出[C, D]
- 核心算法:怎么实现除法?
- A-B-B…-B(C个B)=D
- 改进:利用len(A)-len(B)
- 二分法 在[1, A]之间二分查找
- 程序结构安排:乘法+输出C和D的结构体
- 需要调用函数(二分):大整数乘法减法,找二分法中点
- 大概思路:在[1, A] 二分查找,直到找到答案 或 区间长度为1
- 需要注意的特殊情况:A<B 负数和零?
查找资料
- 强烈建议使用谷歌(有时候校园网可以上谷歌)
- 尽量少看CSDN
- 知乎、微信公众号
- 最靠谱的方式仍然是看书,特别是口碑好的书籍 -> 如何找书?
- 学会使用英文查资料,习惯使用英文