PHP使用棧完成高階計算器-接上文模擬棧

lanyu發表於2021-09-09

距離上一篇文章PHP模擬棧,小夢就答應了小夥伴們要使用棧來完成一個實戰的例子,今天就給大家帶來了這個例子,讓大家更加深入理解它的使用場景!

  圖片描述

  當出現'3+4*3-2'這個字串的時候,我們頭腦中會有很多的辦法去計算這個結果,比如eval/正則等等方法,但是今天小夢給大家講的是它的底層的實現原理,棧

  圖片描述

  程式碼思路如下:
1、一個數棧,存放數字,一個符號棧,存放運算子
2、迴圈掃描字串,如果是數字就入數字棧,如果是運算子將分為以下情況:
(1)如果符號棧為空將直接入棧
(2)如果當前的運算子(即將入棧的運算子)的優先順序,小於等於符號棧頂部運算子的優先順序 ,將在數字棧中出棧兩個數字然後在符號棧中出棧一個運算子進行計算,之後將計算結果存入數字棧,運算子存入符號棧
(3)如果運算子的優先順序大於符號棧頂部運算子,那麼將直接入棧
3、計算結果:如果符號棧為空,將計算完畢,計算步驟為:從數字棧出棧兩個數字和符號棧中出棧一個符號棧進行計算,然後存入數字棧,之後運算結果在數字棧中

  圖片描述

  上程式碼了:

  圖片描述

  圖片描述

  圖片描述

  圖片描述

  圖片描述

  圖片描述

  圖片描述

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2812889/,如需轉載,請註明出處,否則將追究法律責任。

相關文章