使用棧完成表示式的計算 思路
通過乙個 index 值(索引),來遍歷我們的表示式
如果我們發現是乙個數字, 就直接入數棧
如果發現掃瞄到是乙個符號, 就分如下情況
3.1 如果發現當前的符號棧為 空,就直接入棧
3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符, 就需要從數棧中pop出兩個數,在從符號棧中pop出乙個符號,進行運算,將得到結果,入數棧,然後將當前的操作符入符號棧,如果當前的操作符的優先順序大於棧中的操作符, 就直接入符號棧.
當表示式掃瞄完畢,就順序的從 數棧和符號棧中pop出相應的數和符號,並執行.
最後在數棧只有乙個數字,就是表示式的結果
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)
;//入棧
}int res2 = numstack.
pop();
//將數棧的最後數,pop出,就是結果
system.out.
printf
("表示式 %s = %d"
, expression, res2);}
}//定義乙個 arraystack2 表示棧, 需要擴充套件功能
class
arraystack2
//可以返回當前棧頂的值, 但是不是真正的pop
public
intpeek()
public
boolean
isfull()
public
boolean
isempty()
public
void
push
(int value)
top++
; stack[top]
= value;
}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...
棧實現綜合計算器(中綴表示式)
1.通過乙個index值 索引 來遍歷我們的表示式 2.如果發現是乙個數字,直接入棧 3.如果發現掃瞄到的是乙個符號,就分下面情況 1 如果發現當前的符號棧為空,就直接入棧 2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符,就需要從數棧中pop出兩個數,再從符號...
棧 實現綜合計算器(中綴表示式)
棧 stack 棧的實現定義乙個top來表示棧頂,初始化為 1 入棧 當有資料入棧,top stack top data 出棧 value stack top top 綜合計算器的實現 計算器設計思路 含小括號 先定義兩個陣列棧。乙個用於儲存數字,乙個用於儲存運算符號 在定義乙個index用於讀取傳...