// 讓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.
println
("表示式"
+ expression +
"="+ numstack.
pop());}}
package com.pro.stack;
public
class
calculatorstack
//棧滿
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
intpeek()
//遍歷棧
public
void
list()
for(
int i = top; i >=
0; i--)}
//返回運算子的優先順序,優先順序有程式設計師確定.優先順序使用數字表示,
//數字越大,則優先順序越高
public
intprioty
(int oper)
else
if(oper==
'+'||oper==
'-')
else
}//判斷是不是元素符
public
boolean
isoper
(char ch)
//計算方法
public
intcal
(int num1,
int num2,
int oper)
return res;
}}
棧實現表示式計算
原理 數 入棧 入棧 運算子出棧,直到 和 匹配 運算子 當前符優先順序 棧頂符優先順序 入棧 當前符優先順序 棧頂符優先順序 棧內運算子出棧,運算後進棧,再比較 其中 優先順序大於 如下 先建compute.h標頭檔案 pragma once double compute char str 計算 ...
棧實現表示式的計算
之前寫過這個的部落格,但是覺得不太好,都是截圖,所以我就趁有時間整理了一下。結果發現了乙個天大的低階錯誤。我在實現棧的時候把析構函式寫錯了 首先,執行的時候答案是對的,但是是記憶體錯誤表現 然後我就進行單步除錯 一直執行到最後一句 也沒有錯誤,直到最後乙個大括號就出現了.所以說明可能是出現了記憶體洩...
用棧實現表示式計算
public class calculator public static inthandle string express else else else else int num integer.parseint keepnum keepnum numstack.push num index if...