62. 伪代码与流程图

62 算法与数据结构 伪代码与流程图

越高级的程序员的抽象能力越强

function t(fn, delay){
 let fn2 = ()=>{
  if(fn2.timer){return}
  fn()
  fn2.timer = setTimeout(()=>{
  	fn2.timer = null
  },delay)
 }
 return fn2
}

let f = t(()=>{console.log('火球术')},5000) 

流程图

如何用代码表示逻辑

输出N个数中最大的一个数

找到第1,2个数字中较大的那一个,存入max

找到max和第3个数字中较大的那个,存入max

找到max和第。。。个,存入max

max就是最大的数

三种语句搞定所有逻辑

所有的复杂算法都能用这三种语句描述(结构化编程理论)

顺序执行语句

条件判断语句

循环语句

推荐使用Mindjet画流程图, 也可以用XMind,百度脑图等工具代替

方形表示语句,菱形表示条件判断,圆方形表示结束

流程图,伪代码的好处

锻炼你的大脑

你必须自己画出来

不能运行在计算机里

整理你的思路

思路乱,则图乱

伪代码都写不好,则代码更写不好

流程图的应用

用流程图找到最大数(两个数,N个数)

总结

  • 逻辑很重要

  • 用三种语句表达逻辑

  • 用图和伪代码表示三种语句

数据结构

就是数据与数据之间的关系和结构

如何表示两个数据

如果顺序有意义

  • [x,y]表示第一个是x,第二个是y

  • [y,x]表示第一个是y,第二个是x

  • 比如坐标就是这样的数据

  • 要提供first和last操作

如果顺序无意义

(x,y)和(y,x)一样

比如血压值(120,80)和(80,120)没区别

不需要提供first和last操作

如何表示N个数据

如果顺序有意义

数组表示[a1,a2,...aN]

要提供索引操作get(i)

要提供add/indexOf/delete操作

如果顺序没有意义

集合表示{a1,a2,...aN}

今天所有的代码都跟JS无关

要提供add/delete/has操作

如何表示N对N数据

比如学号

用哈希表表示

hash = {1001 =>'小方',1002=>'小红'}

数据结构 = 数据形式 + 操作(不同形式的数据暴露不同的操作)

数据结构的作用

提前记住一些结构

这些结构很常见,能让你很快理清思路,并且面试经常问

锻炼你的抽象能力

  • 一种数据结构往往能解决很多类似的问题

  • 如果你选错了数据结构,你根本就想不出思路

  • 牛逼的程序员更重视数据结构,而不是算法

最后更新于

这有帮助吗?