欢迎光临散文网 会员登陆 & 注册

PVZ理论中的栈究竟是什么 计算机存储-栈

2023-03-09 22:59 作者:无铭超喜欢侧搭  | 我要投稿

栈,一种计算机的存储类型。在pvz中运用广泛,舞王识别伴舞,小偷偷植物,种植紫卡等等都是使用栈做到的


现在虽然知道栈在pvz里使用的很多,但是不了解其中的规律仍然没有用,如果直接讲栈肯定会无比抽象,所以我们把栈画出来



现在对比下面两图,找一下他们的区别



可以发现上图左边封了口,而下图没有。上图所代表是另一个的计算机存储类型:列表。就是这小小的区别成为了栈最大的特点


现在对比一下从列表中拿出一个2和从栈中拿出一个2的区别

可以发现列表可以直接取出2,而栈需要把2左边所有的数据拿出才能取出2



这就是栈的特点,不能直接取出中间的数据,必须从左边拿出,这可以总结出一个规律:后进先出

现在我们知道了栈是什么和栈的特点,那么现在就应该研究栈在pvz中的运用了

在pvz中种下三颗植物,顺序是:向日葵 豌豆射手 坚果。此时3个植物获得的序号和栈的情况如下

可以发现,最先种的植物可以拿到最左边的栈,那此时铲掉豌豆射手看看栈的变化

豌豆射手的所获取的序号又回到了栈中,继续铲植物

铲掉坚果后,坚果的序号也回到了栈中,那么现在中个双发它的序号是什么

双发获得了原本属于坚果的序号2,而更小的1因为栈的特点没被取出来。现在我们知道了pvz是如何运用栈,但在实战中有什么用呢

实战冲关时,打无炮和少炮往往会遇到需要垫巨人的情况,为什么有的时候巨人会先砸垫材有的时候先砸永久性植物,这其实也和栈有关系

现在我们先放一个曾再放一个喷,此时小喷的栈比曾大

现在放一个巨人模拟实战发生的垫巨人


看看结果,序号小的曾被砸了,而应该是垫材的小喷还在

由此可以知道,僵尸先攻击栈更低的植物,那么除了垫巨人以外还有什么用处吗?

答案是肯定的,艺术开局的抽荷叶与抽花盆都用到了栈

小偷根据栈来识别自己偷的植物,只要用一些特殊手法骗过小偷,让另一个植物和小偷所偷的植物的序号一样,并且原本要偷的植物消失了,那么小偷则会偷那个序号与原目标的序号一样的植物,这也就是小偷的栈位理论

不仅植物,僵尸也同样是用栈,舞王是如何

识别哪个伴舞是自己的呢?答案是使用栈

看看下面的两个视频

视频皆来于大佬 李华的27号速记员

视频中的舞王为什么不召唤伴舞呢?

这是因为通过栈让舞王的识别出错,上图的舞王把魅惑普僵识别成了自己的伴舞,下图的舞王把另一个舞王召唤的伴舞识别成了自己的伴舞,在已经有伴舞(对于舞王说已经有了)的情况下舞王当然不会再次召唤

这就是栈在实战中的运用。除了无尽,在ize也有许多用处,因为我并没有深究过ize所以不写

接下来是对于栈更为深层讲解,对于pvz的用处已经不是很大了,最好有一定编程基础

栈(Stack)是一种线性存储结构,虽然为了方便理解我把他画成横向的,但实际的栈应该是这样的

栈的最顶部也被称为栈顶,栈顶也是允许拿出和放入数据的一端,而栈顶的另一端则是栈底

把数据放入栈的操作被称为入栈or进栈

把数据拿出栈的操作被称为出栈


因为栈的特殊性,所以栈不能像变量和列表那样直接拿出或放入数据

一般入栈的操作命名为push出栈的操作命名为pop

除了入栈和出栈,我们还可以对栈进行如下操作

以C++为例,不同语言会有不同写法

返回栈顶数据: 栈名.top()

返回栈的大小(栈中所拥有的数据量):栈名.size()

判定栈是否为空,若是则返回true,若不是则返回false: 栈名.empty()

PVZ理论中的栈究竟是什么 计算机存储-栈的评论 (共 条)

分享到微博请遵守国家法律