資料結構 中綴表示式的計算

2021-10-06 20:41:15 字數 1899 閱讀 7179

package com.cubemonkey.stack;

/** * 使用棧完成表示式的計算

* @author cubemonkey

* @create 2020-06-04 18:41

*/public

class

calculator

return num;

}/**

* 判斷指定字元是不是數字

* @param ch

* @return

*/public

static

boolean

isdigit

(char ch)

/** * 中綴表示式的計算**

* 計算思路

* 1.通過乙個index值(索引) ,來遍歷我們的表示式

* 2.如果我們發現是乙個數字 就直接入數棧

* 3.如果發現掃瞄到是乙個符號, 就分如下情況

* 3.1如果發現當前的符號棧為空,就直接入棧

* 3.2如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於核中

* 的操作符,就需要從數棧中pop出兩個數在從符號棧中pop出-乙個符號,進行運算,

* 將得到結果,入數棧,然後將當前的操作符入符號棧,如果當前的操作符的優先順序大

* 於棧中的操作符,就直接入符號棧.

* 4.當表示式掃瞄完畢,就順序的從數棧和符號棧中pop出相應的數和符號,並執行.

* 5.最後在數棧只有乙個數字,就是表示式的結果

* @param exp

* @return

*/public

static

intcalculate

(string exp)

numstack.

push

(num);}

else

operatorstack.

push

(operator)

;break

;case

'*':

case

'/':

while

(!operatorstack.

isempty()

&& operatorstack.

peek()

!='('

&&(operatorstack.

peek()

=='*'

|| operatorstack.

peek()

=='/'))

operatorstack.

push

(operator)

;break

;case

'(':

operatorstack.

push

(operator)

;break

;case

')':

while

(!operatorstack.

isempty()

&& operatorstack.

peek()

!='(')if

(operatorstack.

peek()

=='('

)break

;default

:break;}

} index++;}

while

(!operatorstack.

isempty()

)int ans = numstack.

pop();

return ans;

}public

static

void

main

(string[

] args)

}

資料結構 中綴表示式轉字尾表示式

話不多說上例子 1 2 3 4 5 1 2 3 4 5 中綴表示式轉字尾表示式思路分析 1.首先需要兩個棧運算子棧 s1和儲存中間結果的棧 s2 2.從左至右掃瞄中綴表示式 2.1當前為運算元,將其壓棧至s2 2.2當前為運算子 2.2.1如果s1為空或者棧頂運算子為左括號 則將此運算子直接入s1棧...

資料結構之中綴表示式轉字尾表示式

中綴表示式轉字尾表示式的基本規則 1.遇到運算元就直接輸出 2.遇到左括號就壓入棧中 3.遇到右括號就將棧中所有符號輸出且彈出 左括號只需要彈出不需要輸出 4.遇到操作符就與棧頂元素進行對比 當前操作符比棧頂操作符的優先順序大的話 就直接將當前操作符壓入棧中 當前操作符比棧頂操作符的優先順序小或者相...

資料結構之中綴表示式轉字尾表示式

對於計算機來說,字尾表示式更方便計算,但是對於我們來說,中綴表示式更方便理解。為了大家都方便,下面就聊聊如何把乙個中綴表示式借助 轉化成乙個字尾表示式。在實現轉字尾表示式時,用棧結構儲存操作符,由於中間結構不用出棧,並且如果用棧結構儲存,那麼將出棧結果逆序才是我們要的字尾表示式,所以用list儲存即...