PVZ理論中的棧究竟是什麼 計算機儲存-棧

棧,一種計算機的儲存型別。在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()

隨便看看 更多