【昊昊带你学】基本数据结构(上)

流程控制语句及伪代码

首先,我们要知道伪代码是为了来描述算法的。所以伪代码必须结构清晰,可读性要好,尽量贴近自然语言。据昊昊所知,伪代码没有什么硬性规定的样子,大家不用拘泥于某种语言只要能表达清楚就好。下面我们来介绍一下常用的语句及其伪代码(这里我参照的是《算法导论》里的伪代码,以后用的伪代码应该也是参照《导论》来写的)。

 

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值。

 

写在最后:

      这一部分大家熟悉一下伪代码的使用,然后好好摆弄一下队和栈的使用。这部分还是没什么重头戏的恩恩,大家可以选一门语言,根据伪代码来写程序了哈~记得转哦亲!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值