中綴表示式計算

2022-05-19 06:45:08 字數 524 閱讀 6800

雙棧法(數字棧和運算子棧)

1.從前向後遇見數字就壓入數字棧

2.遇見左括號壓棧

3.遇見右括號則彈出數字棧頂兩個數字,和乙個運算子棧乙個運算子進行計算,直至遇見左括號,退括號,計算結果壓棧

4.遇見運算子,若符號棧頂的元素小於當前運算子優先順序,則入棧;若相等或大於則數字彈出倆,符號彈出乙個計算,直至符號棧頂元素優先順序小於當前運算子,入棧當前運算子; 

注意各個運算符號的優先順序:

除法 4  乘法 3  減法 2 加法 1

這裡將除法的優先順序高於乘法是要處理 6 / 3 * 6的問題,減法也類似,處理 2 - 6 + 3 的問題

也可以將中綴表示式轉化為字尾表示式進行計算

規則:從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分;

若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於找頂符號(乘除優先加減)則棧頂元素依次出找並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。

左括號直接入棧,比較優先順序時左括號優先順序低於加減乘除

計算中綴表示式

計算中綴表示式 可以稱得上是乙個特別經典的關於棧的演算法題,幾乎在所有資料結構教材中都會涉及,而且很多公司面試或者筆試的時候都會把這道題作為乙個考察點。可以說,這是一道必須要掌握的演算法題。中綴表示式 字尾表示式等概念在這裡就不贅述了,讓我們直奔主題。題目 輸入乙個中綴表示式,計算其結果。輸入的前提...

中綴表示式轉字尾表示式及其計算

演算法 1.迴圈讀取輸入的字串 2.讀取到運算元 輸出 3.讀取到 彈出棧的內容到輸出流直到遇到 最後將 或 入棧 4.讀取到 彈出棧的內容到輸出流直到遇到 最後將 或 入棧 5.讀取到 入棧 6.讀取到 彈出棧的內容到輸出流直到遇到 圓括號不輸出。個人實現的 如下 public static st...

中綴表示式轉字尾表示式與計算

1.建立兩個棧,乙個儲存數字和字尾表示式s1,乙個儲存符號棧s2 2.儲存流程 1 如果符號棧s2為空,直接存入符號。2 如果不為空,當前符號優先順序等於或者大於棧的符號,直接存入。3 如果不為空,當前符號優先順序雄小於棧的符號,先彈出乙個符號棧頂的元素,再比較,然後再存入 4 如果遇到 直接存入。...