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

2021-09-28 21:31:19 字數 2049 閱讀 8022

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

2.如果發現是乙個數字,直接入棧

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

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

2)如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符,就需要從數棧中pop出兩個數,再從符號棧中pop乙個符號,進行運算,將得到的結果,入數棧,然後將當前的操作符入符號符,如果當前的操作符的優先順序大於棧中的操作符,就直接入符號棧

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

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

package com.atguigu.stack;

public

class

calculator

else

}else

}else

else}}

//讓index+1 並判斷是否掃瞄expression最後

index++;if

(index >= expression.

length()

)}//掃瞄完畢,就順序的從數棧和符號棧中pop除對應的數和符號,並執行

while

(true

) num1 = numstack.

pop();

num2 = numstack.

pop();

oper = operstack.

pop();

res = numstack.

cal(num1, num2, oper)

; numstack.

push

(res);}

system.out.

printf

("表示式 %s = %d"

,expression,numstack.

pop())

;}}//先建立乙個棧

//定義乙個arraystack2表示棧

class

arraystack2

//增加乙個方法,可以返回當前棧頂的值,但是不是真正的pop

public

intpeek()

//棧滿

public

boolean

isfull()

//棧空

public

boolean

isempty()

//入棧-push

public

void

push

(int value)

top++

; stack[top]

= value;

}//出棧-pop,將棧頂的資料返回

public

intpop()

int value = stack[top]

; top--

;return value;

}//顯示棧的情況【遍歷棧】,遍歷時,需要從棧頂開始顯示資料

public

void

list()

//需要從棧頂開始顯示資料

for(

int i = top; i >=

0; i--)}

//返回運算子的優先順序,優先順序是程式設計師來確定,優先順序使用數字表示

//數字越大優先順序越高

public

intpriority

(int oper)

else

if(oper ==

'+'|| oper ==

'-')

else

}//判斷是不是乙個運算子

public

boolean

isoper

(char val)

//計算方法

public

intcal

(int num1,

int num2,

int oper)

return res;

}}

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

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

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

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

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

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