My thoughts on Data Structure and Algorithm -1

我关于数据结构与算法的想法–第一弹

写代码之前的规划

  1. 核心算法?数据存储结构?输入输出?
    思考:还有更好的方法吗?
  2. 程序结构安排和类的设计(.h .cpp)?
  3. 算法的实现— 函数封装(功能、输入输出)写伪代码
  4. 1 一个函数干一件事
  5. 2 功能易于维护
  6. 3 函数调用关系
  7. 非常规情况处理,如除零错误、链表已空等

写代码的经验

  1. 命名规则,如MAX_SIZE全部大写的表示全局变量
  2. 注释(程序说明,函数功能,变量解释)
  3. 函数及变量是否 const friend & *
  4. 不要等到完全写完再编译,早发现问题,早改正
  5. 不要怕bug。越怕,越容易bug
  6. 如果不会调试,在关键步骤输出关键变量的值(输出调试法)
  7. 遇到没见过的报错,上网查

具体编程的时候需要注意

  • 特殊情况:输入为空,数组已经达到最大长度 等
  • 循环体容易出错的地方:第一步,中间步骤,最后一步
  • 代码易于维护,要让其他人看得懂
  • 进一步:思考是不是有更高效的写法

写代码之前的规划:以“大整数除法”为例

  1. 问题重述:A÷B=C…D,输入[A, B] 输出[C, D]
  2. 核心算法:怎么实现除法?
    • A-B-B…-B(C个B)=D
    • 改进:利用len(A)-len(B)
  3. 二分法 在[1, A]之间二分查找
  4. 程序结构安排:乘法+输出C和D的结构体
  5. 需要调用函数(二分):大整数乘法减法,找二分法中点
  6. 大概思路:在[1, A] 二分查找,直到找到答案 或 区间长度为1
  7. 需要注意的特殊情况:A<B 负数和零?

查找资料

  • 强烈建议使用谷歌(有时候校园网可以上谷歌)
  • 尽量少看CSDN
  • 知乎、微信公众号
  • 最靠谱的方式仍然是看书,特别是口碑好的书籍 -> 如何找书?
  • 学会使用英文查资料,习惯使用英文