伪代码与流程图
1.编程语言也能抽象
JS、Python、Java、PHP根本没有区别
2.以上这些语言都有的东西
- 声明
- if…else…(条件判断)
- while循环、for循环
- 函数
- 对象
3.这意味着
- 没必要过分关注语言的细节
- 首先理解这些语言的不变之处
- 以不变应万变
4.有什么东西是不变的
- 对编程的热爱
- 逻辑和算法
- 数据结构
二、逻辑
所有的变成,都在使用逻辑
1.逻辑是什么
1.1 三段论逻辑
- 命题一:JS有7种数据类型:string、number、bool、symbol、undefined、null、object
- 命题二:JS的函数不属于前六中类型
- 如果命题一、二为真,那么可以得到
- 推论:JS的函数属于object类型
2.如何用代码表示逻辑(写代码就是写逻辑)
- 用if…else…可以表示逻辑
- 用for循环可以表示逻辑
3.三种语句搞定所有逻辑
所有的逻辑只需要三种语句——结构化编程理论
(但结构化编程在某些情况下会变得麻烦,比如错误处理)
- 顺序执行语句
语句1
语句2 - 条件判断语句
if...then...else...
:如果满足条件,则…否则…
if...else if...else...
:嵌套 - 循环语句
while...do...
for i from 1 to n...
注意:语法的细节永远是最无聊的,只是方法不同,只要能够表达某个抽象的意思即可
4.推荐使用Mindjet画流程图
(也可以用XMind、百度脑图等工具)
5.流程图、伪代码的好处
提高应对复杂问题的能力
- 锻炼大脑
必须自己画出来
不能运行在计算机 - 整理思路
6.流程图规则(可以额外再学习)
- 每个方形只能有一个出口
- 每个菱形必须要有两个出口
圆角矩形:开始和结束
菱形:判断,每一个菱形都有真和假两种情况
总结:
- 逻辑很重要
- 用三种语句表达逻辑
- 用图和伪代码表示三种语句
三、数据结构
数据与数据之间的关系和结构
1.如何表示两个数据
1.1如果顺序有意义(有序的二元组)
- [x,y]表示第一个是x,第二个是y
- [y,x]表示第一个是y,第二个是x
- 比如坐标就是这样的数据
- 要提供first和last操作
1.2 如果顺序无意义(无序二元组)
- (x,y)和(y,x)一样
- 比如血压值(120,80)和(80,120)没区别
- 不需要提供first和last操作
2.如何表示N个数据
2.1 如果顺序有意义
- 数组表示[a1,a2,…a2N]
- 要提供索引线索 get(i)
- 要提供 add/ indexOf / delete 操作
2.2 如果顺序没有意义
- 集合表示{a1,a2,…aN}
- 今天所有代码都与JS无关
- 要提供 add / delete / has操作
3.如何表示N对N数据(如:学号和名字对应)
- 用 [哈希表] 表示
- 哈希表有 key 对应 value
hash = {1001 =>'小方',1002=>'小红'}
- 和JS对象的区别:JS对象的key只能是字符串,hash表的字符串可以是字符串、数字、布尔、对象等等,且hash表没有原型
- JS的对象是对hash表的一种实现
4.数据结构 = 数据逻辑形式 + 操作
不同形式的数据暴露不同的操作
4.1 数据结构的作用
- 提前记住一些结构
这些结构很常见
这些结构能让你很快理清思路
这些结构面试经常问 - 锻炼你的抽象能力
一种数据结构往往能解决很多类似的问题
如果你想错了数据结构,你根本想不出思路
牛逼的程序员更重视数据结构,而不是算法
4.2 快速入门数据结构
8种排序算法