中序表示式轉後續表示式的堆疊實現

2021-06-21 22:13:28 字數 324 閱讀 7192

逐個字元讀取中序表示式,

若為字母則直接新增到後續表示式中。

若為'('則壓入堆疊。

若為')'則不斷從堆疊中彈出運算子,直到遇到'('為止。

若為+,-,*,/,%中的某個運算子時,若運算子優先順序高於棧頂運算子優先順序,則將其直接壓入堆疊,否則不斷出棧運算子,直到滿足該運算子優先順序高於棧頂運算子優先順序或者堆疊為空時,再將該運算子壓入堆疊。

若表示式已經讀取完,堆疊中還有運算子,則不斷出棧運算子即可。

根據自己的理解又描述了一遍,明天考線性表的內容,今天覆習的時候就把這個內容給忘掉了。看來以後需要記點筆記啊,或者經常用自己的話把這些演算法寫成部落格。

await會阻塞其所在表示式中後續表示式的執行

在進入正文之前,我們首先來看一段 這段 會輸出什麼呢?let x 0 async function test test x 1 複製 輸出3?還是2?正確答案是 2 首先我們先記住一句話,那就是非同步函式 async方式宣告的函式 不代表其函式內部的所有 都是非同步方式執行的,這句話什麼意思呢?通俗...

中序表示式轉字尾表示式

3 4 5 6 這種寫法是中序表示式 而後序表示式則是將運算子放在運算元的後面,如 3 4 5 6 可以看出後序表示式中沒有括號,只表達了計算的順序,而這個順序恰好就是計算器中的一般計算順序。建立乙個棧s 從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如果讀到n元運算子 即需要引數個數為n的運算...

中序表示式轉後序表示式

演算法的思想是這樣的 演算法分為兩個棧,乙個opstack為操作符棧,另一numstack為運算元棧,隨著程式執行運算元棧中里也會有操作符,這是因為小運算元和操作符化作了更大的運算元。如果需要求值,就會將運算元計算出結果,而由於此演算法只是求表示式,所以就保留了操作符。每一次彈出棧時都會涉及到操作符...