猫史档案馆


【教程帖】算法入门 七、栈(是不是有点难le……)

用户:SKQASKQA查看:10 回复:4 评论:10 创建时间:2020-05-31T12:48:31


是比较常见的一个数据结构,是特殊的列表(结构体、多级索引、队列都是特殊的列表)。队列是尾进(push入队)头出(pop出队),而栈是尾进(push入栈)尾出(pop出栈)。

center_image

细心的训练师们应该已经发现了,栈的英文名是stack(队列的英文名是queue)。

(理解上一节的都知道)

下面用案例来学习栈。和上一节一样,输入a和b,计算a*b-b+a。

center_image

简单吗?我们来看看这个案例的另一个版本,也就是版本。

center_image

可以想象,push后pop,popValue中的值就是push的值。所以说出popValue就是说出push的值(a*b-b+a)。

有的人会问,把事情搞那么复杂又要push又要pop有意思吗?就算用栈还要pop多次一举,为什么不能直接读取呢?

下面一 一解答。

的确,像这种简单的程序用push和pop没有意义,但是对于较强大的非尾递归,push和pop几乎是必须的,至于案例已经超出本节的讨论范围,我会在下几次讲解。

对于栈,要遵守push后对应pop,一个push就必定要匹配一个pop,程序执行完栈应该是空的。如果是读取,不能直接读取,会有另外一个函数:

center_image

由于积木太长可能截图不下,给你文字版的:

定义getParam n

将localVar设为 栈的第 栈的项目数-n 项

getParam就是获取值,因为栈是出,所以使用栈的项目数-n项较合适。

用的是localVar变量!不是popValue、retVal(返回值)!

有获取值,就要有设置值。设置值的函数为:

center_image

将栈的第 项目数-n(问为啥是项目数-n的人关小黑屋)项设置为n2,就是设置值。

函数名可以有两种写法,setParamsetValue。Param和Value都是“值”的意思。

没了


回复

上一页1 页 / 共 1下一页
许某某呱呱呱X凌点编程许某某呱呱呱X凌点编程

Scratch

点赞0


评论


11111111111121111111111112

所以你在bcm发scratch……

点赞0


评论


燚卿燚卿

是很难……我放弃了(捂脸)

点赞1


评论


爵士OIer爵士OIer

讲栈而不讲DFS?

点赞0


评论