棧實現綜合計算器(中綴表示式)

2021-09-27 11:40:54 字數 1693 閱讀 7830

定義兩個棧,乙個數字棧(numstack),乙個符號棧(operstack)

我們定義乙個index來遍歷我們的表示式

定義乙個keepstring+=key幫助我們拼串

如果發現key是乙個數字,此時判斷key』的下乙個元素是不是數字,繼續向後遍歷,直到key的下乙個元素不是數字時,將integer.parseint(keepstring)存入數字棧中

如果kery是符號,那麼

1)符號棧如果為空,那麼直接入符號棧

2)如果符號棧不為空,那麼key還要和棧中的符號比較優先順序,如果棧中的優先順序高,那麼從數字棧中取出兩個數字,從符號棧中取出符號進行運算,將運算結果存入數字棧中,如果key優先順序高,那麼直接入棧。

public

class

calculator

else

}else

}else

else}}

index++

;//判斷是否掃瞄到最後乙個元素

if(index == expression.

length()

)}//字串遍歷完畢後進行運算棧中資料

//當符號棧為空時,計算完畢,數字棧中只有乙個元素那就是結果

while

(!operstack.

isempty()

)//列印結果

system.out.

println

(expression +

"="+ numstack.

pop())

;}}class

stack

public

boolean

isempty()

public

boolean

isfull()

public

void

push

(int num)

top++

; stack[top]

= num;

return;}

public

intpop()

int value = stack[top]

; top--

;return value;

}//返回棧頂元素,幫助後面符號的優先順序比較

public

intpeektop()

//定義符號的優先順序

public

intpripority

(int oper)

else

if(oper ==

'+'|| oper ==

'-')

else

}//判斷元素是否為符號

public

boolean

isoper

(char oper)

//計算結果

public

intcal

(int num1,

int num2,

int oper)

return res;

}}

棧實現綜合計算器(中綴表示式)

1.通過乙個index值 索引 來遍歷我們的表示式 2.如果發現是乙個數字,直接入棧 3.如果發現掃瞄到的是乙個符號,就分下面情況 1 如果發現當前的符號棧為空,就直接入棧 2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符,就需要從數棧中pop出兩個數,再從符號...

棧 實現綜合計算器(中綴表示式)

棧 stack 棧的實現定義乙個top來表示棧頂,初始化為 1 入棧 當有資料入棧,top stack top data 出棧 value stack top top 綜合計算器的實現 計算器設計思路 含小括號 先定義兩個陣列棧。乙個用於儲存數字,乙個用於儲存運算符號 在定義乙個index用於讀取傳...

棧實現綜合計算器 中綴表示式

棧 計算器 運算 思路 自己定義符號優先順序 priority 判斷是否為符號 isoper 進行運算 cal 需要兩個棧 數棧 符號棧 定義需要的相關變數 index num1 num2 res oper ch 分解表示式 判斷當前字元 是 數字 還是 符號 7.1 如果是數字,直接壓入數棧中 7...