流程控制语句及伪代码
首先,我们要知道伪代码是为了来描述算法的。所以伪代码必须结构清晰,可读性要好,尽量贴近自然语言。据昊昊所知,伪代码没有什么硬性规定的样子,大家不用拘泥于某种语言只要能表达清楚就好。下面我们来介绍一下常用的语句及其伪代码(这里我参照的是《算法导论》里的伪代码,以后用的伪代码应该也是参照《导论》来写的)。
If条件语句:
顾名思义是由某个条件使流程分化成若干条支线,伪代码如下:
If 表达式
then ……
……
……
else ……
……
……
Switch分支语句:
其实switch的功能可以用if条件语句很类似,只是if只能分为两条支线,而switch可以分出很多条,伪代码如下:
Switch 表达式
Case 值1 :……
Case 值2 :……
…………
Case 值n : ……
While循环语句:
这个循环语句是先判断再循环,知道条件不满足时退出循环。伪代码如下:
While 表达式
Do 1、……
2、……
3、……
……
N、……
(先判断表达式是否为真,当表达式为真时执行语句1-n,在重复上述过程,直到表达式为假)
For 循环语句:
这也是一种循环,不过这种循环有明确的次数。伪代码如下:
For i ← a to/downto b (step x)
Do ……
……
……
(i以x步长 从a 递增/递减 至b执行循环体,这里i是变量)
Break:
中断语句执行
Continue:
终止当前循环,继续下一次循环。
赋值符号←:
A ← 5
(将A赋值为5)
栈
LIFO(last-in-first-out)类型的数据结构,在算法概述那篇文章里已经有所介绍,下面来具来介绍一下栈的实现(来自《算法导论》):
http://www.cs.usfca.edu/~galles/visualization/StackArray.html
上面那个网址是一个可视的栈。
这表示栈为空,top指向0
STACK-EMPTY(S) //没有编程经验的孩纸看这里,这叫一个函数~
If top[s] = 0
Then return true
Else return true
PS: S是一个栈,top[s]返回的是栈顶位置。如果是0则栈中没有元素。否则栈不为空。
PUSH(S,x)
Top[S] ← top[S] + 1
S[top[S]] ← x
PS:push的意思是将一个元素压到栈里,那么就需要将栈顶那个指针上移,此时 top[S]指向的位置没有元素,然后将X赋给S[top[S]]。
POP(S)
If STACK-EMPTY()
Then error “underflow”
Else top[S] ← top[S] – 1
Return S[top[S]+1]
PS: 与PUSH相反,POP要弹出栈顶元素。所以先将栈顶指针下移然后弹出栈顶元素。
PEEK(S)
Return S[top[S]]
PS: PEEK是显示栈顶元素而不删除(如果在OOP编程的时候可能不能直接操作栈内元素,用PEEK来封装一下O_o)
队
先进先出的数据结构:
http://www.cs.usfca.edu/~galles/visualization/QueueArray.html
先进去玩玩吧~要注意,
这表示头指针在3这个位置
这表示尾指针在2这个位置
大家可以把队中加满元素,然后DEQUEUE出两个元素,再ENQUEUE一个元素,你会发现它被加到0的位置了。Tail从14跳到了0.
ENQUEUE(Q,x)
Q[tail[Q]] ← x
If tail[Q] = length[Q]
Then tail[Q] ← 1
Else tail[Q] ← tail[Q] + 1
PS: 进队操作,x赋给队尾元素,tail[Q]+1,如果队列已满,队尾指针挪到开头,来防止溢出
DEQUEUE(Q)
X ← Q[head[Q]]
If head[Q] = length[Q]
Then head[Q] ← 1
Else head[Q] ← head[Q] + 1
Return x
PS: 出队操作,队头元素赋给X,头指针+1,同ENQUEUE防溢出,最后返回X值。
写在最后:
这一部分大家熟悉一下伪代码的使用,然后好好摆弄一下队和栈的使用。这部分还是没什么重头戏的恩恩,大家可以选一门语言,根据伪代码来写程序了哈~记得转哦亲!!!