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

2021-10-03 03:26:45 字數 2363 閱讀 4948

棧(stack)

棧的實現

定義乙個top來表示棧頂,初始化為-1

入棧:當有資料入棧,top++,stack[top]=data

出棧:value=stack[top],top- -

綜合計算器的實現

計算器設計思路(含小括號)

先定義兩個陣列棧。乙個用於儲存數字,乙個用於儲存運算符號

在定義乙個index用於讀取傳進來的算式

遇到數字,將其傳入數字棧

遇到運算符號向符號棧存入,如果符號棧中沒有符號就直接入棧;當遇見左括號『(』時,直接入棧;當遇見右括號』)'時需要將括號中的算式全部運算完畢,直到遇見左括號,停止運算,將左括號出棧;如果將要入棧的符號優先順序大於棧頂的符號直接入棧;如果將要入棧的符號優先順序小於或等於棧頂符號,先出棧兩個數字,先用要入棧的符號進行運算,將結果入數字棧。

當讀完表示式,將棧中剩餘的數字進行依次運算

運算規則:先出棧兩個數字,再出棧乙個符號,用後出棧的數字對先出棧的數字進行運算,將結果入數字棧

**實現

package stack;

/** * 含括號多位加減乘除計算器

* 運用棧

*/public

class

arraystackdemo

}

/**

* 計算器類(含括號,多位運算)

*/class

calculator

}else

if(ch ==

'=')

//當讀取到等號時停止讀取

else

else

if(ch ==

')')

//判斷是不是右括號

else}}

else

else

else}}

} index++;}

//所有的算式都拆分完成了,運算棧中剩下的數字

while

(true

)else}}

//判斷是不是運算符號(加,減,乘,除,括號,等號)

public

boolean

isoperation

(char ch)

//對運算符號進行優先順序分類

//加減=1 乘除=2 左括號=0 右括號=3 等號=-1

public

intclassifyoperation

(char ch)

else

if(ch ==

'*'|| ch ==

'/')

else

if(ch ==

'(')

else

if(ch ==

')')

else

}//對比符號的優先順序,ch為讀取的當前運算子,operstack為當前符號棧

//返回正確為當前符號優先順序大於棧頂元素優先順序;錯誤為當前符號優先順序小於等於棧頂元素優先順序;

public

boolean

comparepriority

(char ch, arraystack operstack)

else

}//從數字棧和符號棧自動出棧進行運算

//num1是先出棧的數字 num2是後出棧的數字 oper是運算符號 numstack是數字棧 operstack是符號棧

public

intcount

(arraystack numstack, arraystack operstack)

}}

/**

* 棧類

*/class

arraystack

//判滿

public

boolean

isfull()

//判空

public

boolean

isempty()

//入棧

public

void

push

(int data)

top++

; stack[top]

= data;

}//出棧

public

intpop()

int value = stack[top]

; top--

;return value;

}//顯示棧

public

void

showstack()

}//返回棧頂(棧頂不出棧)

public

intshowtop()

}``

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

定義兩個棧,乙個數字棧 numstack 乙個符號棧 operstack 我們定義乙個index來遍歷我們的表示式 定義乙個keepstring key幫助我們拼串 如果發現key是乙個數字,此時判斷key 的下乙個元素是不是數字,繼續向後遍歷,直到key的下乙個元素不是數字時,將integer.p...

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

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

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

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