伪代码与流程图的相关知识,内容包括抽象概念、逻辑、数据结构。
一、抽象概念
编程其实语法并不难,难的是抽象概念,有时候我们每句都懂,但是加在一起不懂。
编程语言也能抽象,各类编程语言其实都没有很大区别,JS、Python、Java、PHP 其实很多概念是类似的,它们都有这些:
声明
if...else...
函数
对象
这意味着没有必要过分关注语言的细节,应该首先理解这些语言的不变之处,然后以不变应万变。
二、逻辑
所有编程,都在使用逻辑
1. 什么是逻辑
// 三段论逻辑(举例 1)
命题一:JS 有 7 种数据类型:stirng、number、bool、symbol、undefined、null、object
命题二:JS 的函数不属于前六种类型
推理:JS 的函数属于 object 类型
// 三段论逻辑(举例 2)
命题一:JS 中所有函数都是由 Function 构造的
命题二:Function、Object、Array 是函数
推论:Function、Object、Array 是由 Function 构造的
2. 逻辑 VS 直觉
直觉的好处: 直觉能让你快速学会一些东西,比如数字、字符串、数组、对象都可以靠直觉学会
直觉的坏处: 直觉却又能阻止你学会另一些东西,这时你就只能依靠逻辑说服自己,比如虽然不知道 Function 是如何构造 Function 的,但是逻辑告诉我们,确实如此
3. 用伪代码表示逻辑
例子 1 - 输出两个数中较大的一个数
// 如果第 1 个数大于第 2 个数,就输出第 1 个数
// 否则输出第 2 个数
a[12,32]
if a.get(0) > a.get(1)
print a.get(0)
else
print a.get(1)
// 用 if...else... 可以表示逻辑
例子 2 - 输出 N 个数中最大的一个数
// 输出 N 个数中最大的一个数
// 找到第 1、2 个数字中较大的那一个,存入 max
// 找到 max 和 第 3 个数字中较大的那个,存入 max
// 找到 max 和 第 ... 个,存入 max
a [12,32,9,1,23,6]
max = a[0]
for i from 1 to a.length() - 1
if a.get(i) > max then max = a.get(i)
print max
// 用 for 循环可以表示逻辑
表示逻辑需要多少语句?掌握了这些语句就能表达所有逻辑
4. 三种语句搞定所有逻辑
这是「结构化编程」理论,但结构化编程在某些情况下会变得麻烦,比如错误处理,那个时候可能要第四种语句 goto
1. 顺序执行语句
语句 1
语句 2

if...then...else...
if...else if...else

wihile...do...
for i from 1 to n...

流程图、伪代码的好处是: 锻炼你的大脑,整理你的思路
三、数据结构
数据结构就是数据与数据之间的关系和结构
1. 举例子
如何表示两个数据
如果顺序有意义:[x,y] 表示第一个是 x,第二个是 y
比如坐标就是这样的数据,要提供 first 和 last 操作
————————————————————————————————————
如果顺序无意义:(x,y) 和 (y,x) 一样
比如血压值 (120,80) 和 (80,120) 没区别,不需要提供 first 和 last 操作
如何表示 N 个数据
如果顺序有意义:数组表示 [a1,a2,...aN]
要提供索引操作 get(i),要提供 add / indexOf / delete 操作
——————————————————————————————
如果顺序无意义:集合表示 {a1,a3,...aN}
要提供 add / delete / has 操作
如何表示 N 对 N 数据(比如学号)
用「哈希表」表示
hash = {1001 => '小方',1002 =>'小红'}
2. 数据结构的作用
数据结构 = 数据形式 + 操作
有没有觉得很抽象,不同形式的数据暴露出不同的操作,数据结构都是抽象的
提前记住一些结构: 这些结构很常见,能让你很快理清思路,面试经常问
锻炼你的抽象能力: 一种数据结构往往能解决很多类似的问题,如果你选错了数据结构,你根本就想不出思路,牛逼的程序员更注重数据结构,而不是算法
「资料来源:©饥人谷」